【问题标题】:Variables not incrementing within a batch file变量在批处理文件中不递增
【发布时间】:2018-06-29 20:09:16
【问题描述】:

所以我正在尝试创建一个文件,该文件将读取一个名为 saves 的文本文件。在保存中,我希望它最多检查 5 次 1:、2:、3:、4: 和 5:。问题是,当我运行这个for 循环来检查文件5 次时,它总是输出相同的东西,而且不管怎么说都没有保存。非常感谢任何帮助或建议。

@ECHO off
SETLOCAL EnableDelayedExpansion
SET test=0
FOR /L %%i IN (1,1,5) DO (
FINDSTR %%i: Saves.txt >NUL && SET /a %test%+1
ECHO %test%
)
IF %test% EQU 0 ECHO There are no saves. & GOTO :end
IF %test% GTR 0 ECHO There are saves. 
:END
PAUSE

【问题讨论】:

  • 您没有正确使用SET 命令。 set /a test+=1 然后您需要使用延迟扩展来正确显示该值。 echo !test!.

标签: batch-file for-loop


【解决方案1】:

您没有正确使用SET 命令,您需要使用延迟扩展在带括号的代码块内正确显示变量。

@ECHO off
SETLOCAL EnableDelayedExpansion
SET test=0
FOR /L %%i IN (1,1,5) DO (
    FINDSTR /B %%i: Saves.txt >NUL && SET /a test+=1
    ECHO !test!
)
IF %test% EQU 0 ECHO There are no saves. & GOTO :end
IF %test% GTR 0 ECHO There are saves. 
:END
PAUSE

一个更简单的选择是。

FINDSTR /B "1: 2: 3: 4: 5:" Saves.txt >NUL 2>&1 && (ECHO There are saves.) || (ECHO There are no saves.)

如果您的所有行都以数字和冒号开头,那么您可以这样做。

FOR /F "tokens=1 delims=:" %%G IN (saves.txt) do set numsaves=%%G

【讨论】:

  • 答案完美,谢谢。至于建议,它不起作用,因为我仍然需要 test 计数器来计算找到了多少实例。
  • 我会根据您的“检查字符串”建议更好的答案,(一个更简单的选择。),应该是@FindStr "1: 2: 3: 4: 5:" Saves.txt >Nul && (Echo There are saves) || Echo There are no saves您会注意到,FindStr 不输出 STDERR,除非“1:2:3:4:5:”当然不是有效条目(它是),或者Saves.txt 没有t 存在,(它应该存在),所以在这种情况下没有真正需要将 STDERR 重定向到 NUL。
  • @Pitdroid,您能否提供一个 saves.txt 文件的示例。如果我们能看到输入,我们可能会想出一个更好的解决方案。如果您愿意,请更新您的问题。
  • 再次查看代码后修改我的代码我最终没有使用%test% 变量。我使用了另一个 for 循环的计数器。因此,只要我在数字后添加冒号(每行以数字开头,后跟冒号),您的解决方案就可以使用修改后的代码。
  • @Pitdroid,而不是询问,在命令提示符处输入 FindStr /? 并阅读使用信息会更容易!示例:FindStr "^[1-5]:" Saves.txtFindStr /B "[1-5]:" Saves.txt
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多