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的一部分,那么你需要做1 3件事:
1)追加ECHO if语句
IF !counter! gtr !counter2! echo !counter! and !counter2!
2)使用线继续打开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!
)
)
你是我的英雄人! – JustAGuy