EitanT 可能有您正在寻找的解决方案,但它并不能完全解释您的问题。
如果您删除 IF 语句,则在调整缩进以更好地显示实际逻辑之后,您会得到这个。第二个循环在第一个循环内运行。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A counter=0
SET /A counter2=0
for /f %%h in (users.txt) do (
set /a counter2=0
set /a counter=!counter!+1
for /f %%i in (users.txt) do (
set /a counter2=!counter2!+1
echo !counter! and !counter2!
)
)
当您输入 IF 语句时,您会得到这个不正确的代码
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A counter=0
SET /A counter2=0
for /f %%h in (users.txt) do (
set /a counter2=0
set /a counter=!counter!+1
for /f %%i in (users.txt) do (
set /a counter2=!counter2!+1
IF !counter! gtr !counter2!
echo !counter! and !counter2!
)
)
IF 语句是不完整的——你没有告诉它如果是真的该怎么做。
如果您希望 ECHO 成为 IF 的一部分,那么您需要做 3 件事中的 1 件事:
1) 将 ECHO 附加到 IF 语句中
IF !counter! gtr !counter2! echo !counter! and !counter2!
2) 使用line continuation 将IF 和ECHO 线变成一个逻辑线
IF !counter! gtr !counter2!^
echo !counter! and !counter2!
3) 添加另一组括号。注意左括号必须与 IF 在同一行,并且前面必须有一个空格。
IF !counter! gtr !counter2! (
echo !counter! and !counter2!
)
帮助系统描述了 IF 的正确语法。键入HELP IF
或IF /?
从命令行获取帮助。
请注意,我发布的代码逻辑与 EitanT 解决方案不同。我不确定哪个是正确的。像大多数编程语言一样,缩进不会影响逻辑,它的存在是为了让人们更清楚地了解逻辑是什么。您的原始缩进表示 EitanT 提供的逻辑。我忽略了缩进并提供了计算机看到的逻辑。
顺便说一句 - 您不需要在 SET /A 语句中扩展变量。以下工作正常:
set /a counter=counter+1
更好的是,您可以使用递增赋值运算符:
set /a counter+=1
SET /A 还支持在一个语句中进行多个赋值:
set /a counter2=0, counter+=1
您不需要在顶部初始化 counter2 ,因为您也在第一个循环中进行了初始化。
这是使用我根据您现有括号看到的逻辑的最终代码,忽略您的缩进:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A counter=0
for /f %%h in (users.txt) do (
set /a counter2=0, counter+=1
for /f %%i in (users.txt) do (
set /a counter2+=1
IF !counter! gtr !counter2! echo !counter! and !counter2!
)
)