2012-08-30 103 views
0

里面比较变量我有这样的代码:A/F环(批)

@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语句。如果我把它交叉出来,它们都运行得很好。 我的语法有什么问题? 谢谢!

回答

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 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 IFIF /?以获得帮助。

注意我发布的代码的逻辑与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! 
) 
) 
+0

你是我的英雄人! – JustAGuy

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

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! 
    ) 
) 
) 

正确的缩进可以帮助您跟踪包围错误。