如何从文件中批量恢复特定字符串

How to recuperate a particular string from a file in batch

我正在尝试使用批处理文件从文件(我们称之为 MyFile.dart)恢复特定数据。

更准确地说,我正在尝试从这一行中恢复 2.4:

static var version = 2.4;

首先,我使用 for 循环遍历文件的每一行:

FOR /F "tokens=*" %%i IN (MyFile.dart)

然后我想检查该行是否包含特定字符串(此处为“var version”)

set str = %%i
    if not %str:"var version"=% == %str% DO

我从 this topic 得到了这个,但在这里我得到了错误:

=str is unexpected

由于检查不起作用,我对其进行评论,然后在 MyFile.dart 的每一行上尝试下一个 for 循环(如果检查有效,它会仅在包含“var version”的行上):

set str = %%i
FOR /F "tokens=2 delims==" %%a IN (%str%) DO (
    @echo %%a
)

在这里我应该使用“=”作为分隔符来拆分行并显示拆分数组的第二个元素,但是我在控制台中没有打印任何内容,当我注释掉@echo 时,我看到那 %str% 是空的。我尝试直接使用 %%i 但我也遇到了错误。

所以我硬编码了我对循环感兴趣的行:

set str = %%i
    FOR /F "tokens=2 delims==" %%a IN ("static var version = 2.4;") DO (
        @echo %%a
    )

并得到了2.4的预期结果;在控制台中(但显然这不是我想要的)。

总结一下:

这是我的全部代码:

FOR /F "tokens=*" %%i IN (MyFile.dart) DO (
 set str = %%i
 if not %str:"var version"=% == %str% DO (
    FOR /F "tokens=2 delims==" %%a IN (%str%) DO (
      @echo %%a
    )
  )
)

注意:如果你有一个完全不同的算法来得到相同的结果,我会接受它!

 set str = %%i

这会将变量“strSpace”设置为值“Space(值%%i)"

使用语法

set "str=%%i"

包括引号。使用 set "var1=value" 设置 STRING 值 - 这避免了由尾随空格引起的问题。设置算术值不需要引号 (set /a`)

if not %str:"var version"=% == %str% DO (

正确的语法是

if not "%str:var version=%" == "%str%" (

或者更好

if "%str:var version=%" neq "%str%" (

比较是字面的 - 比较运算符的两边都必须用引号引起来,因为值可能包含空格等分隔符。

字符串替换的正确语法是 %varname:string=substitutestring%

为什么要重新设置str

要使用 = 作为分隔符解析字符串,请使用

    FOR /F "tokens=2 delims==" %%a IN ("string") DO (

但是请注意,%str% 将是 str 在遇到 outer 循环 (%%i) 时的值。有关其工作原理的解释,请参阅

您应该考虑使用

FOR /F "tokens=2 delims==" %%a IN ("%%i") DO (

这对我有用 - 我更改了文件的名称

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /F "tokens=*" %%i IN (q71930885.txt) DO (
 set "str=%%i"
 if "!str:var version=!" neq "!str!" (
  FOR /F "tokens=2 delims==" %%a IN ("%%i") DO ( @echo %%a ) 
  ) 
)
GOTO :EOF

回复:

Space2.4;