(Windows批处理文件)FOR LOOP内的IF语句

时间:2014-07-09 20:05:19

标签: batch-file if-statement for-loop batch-processing multiple-choice

我试图编写我的程序的手动文档验证部分。它基本上在同一个文件夹中逐个打开所有pdf文档。当它打开时,我想为用户回应一些可能性。这开始了问题。我有大约180种可能的选择。我正在考虑要求选择第一个字母。然后它将以X字母开头回显所有选择,用户只需输入该选项的编号即可。例如,我们有: 1. Asomething 2. Asomename Asomenametoo Bname 5. Bname 2 6. Bname 3

我希望用户选择第一个字母并打印可能的选择。当选择时,程序应该将一些字符串添加到同一文件夹中具有相同名称的txt文件中。这里我有FOR循环中的IF语句的问题。我想使用goto,但我无法在FOR循环中进行。

我之前可以为每个数字设置所有字符串。例如:当您选择1时,它会将SomeString添加到txt。使用选择选项避免任何拼写错误非常重要。有没有人知道在FOR循环中做任何其他方法?

CODE:

setlocal enabledelayedexpansion
FOR %%b IN (c:\test\*.txt) DO (
IF "%ERRORLEVEL%"=="0" ECHO    Document will open now...
start Acrobat.exe %%b.pdf
ECHO 1. Sample 1
ECHO 2. Sample 2
set /p choice=   Please enter number:
call :OPTION
ECHO !choice! >> %%b
PAUSE
taskkill /IM Acrobat.exe >> c:\test\log\temp.txt
)
PAUSE
GOTO MENU
:OPTION
IF !choice!==1 SET /A !choice!==MNV666
IF !choice!==2 SET /A !choice!==MNV777
GOTO:EOF

1 个答案:

答案 0 :(得分:1)

我在理解您遇到的问题时遇到了一些麻烦,但看起来IF之后的所有陈述都应该是IF的条件,而不仅仅是ECHO声明。为此,您可以将整个块放在括号中,如下所示:

setlocal enabledelayedexpansion
FOR %%b IN (c:\test\*.txt) DO (
    IF "%ERRORLEVEL%"=="0" (
        ECHO    Document will open now...
        start Acrobat.exe %%b.pdf
        ECHO 1. Sample 1
        ECHO 2. Sample 2
        set /p choice=   Please enter number:
        call :OPTION
        ECHO !choice! >> %%b
        PAUSE
        taskkill /IM Acrobat.exe >> c:\test\log\temp.txt
    ) else (
        goto :EOF  REM Just an example of else
    )
)
PAUSE
GOTO MENU
:OPTION
IF !choice!==1 SET /A !choice!==MNV666
IF !choice!==2 SET /A !choice!==MNV777
GOTO:EOF

FOR循环中使用goto时遇到了一些问题吗?