我有这段代码:
@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语句有错误。如果我把它划掉,一切都运行得很好。 我的语法有什么问题? 谢谢!
答案 0 :(得分:2)
我可以发现两个问题:
1)第一个for
循环没有右括号:
for /f %%h in (users.txt) do (
set /a counter2=0
set /a counter=!counter!+1
) <---------------------------------- You're missing this ")"!
2)在第二个循环中,if
语句没有左括号:
IF !counter! gtr !counter2! ( <------ You're missing this "("!
echo !counter! and !counter2!
)
希望这有帮助!
答案 1 :(得分:2)
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)将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提供的逻辑。我忽略了缩进并提供了计算机看到的逻辑。
BTW - 您不需要在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!
)
)
答案 2 :(得分:1)
您的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!
)
)
)
正确的缩进可以帮助您追踪包围错误。