0

我有一个很长的脚本,我将其压缩为以下代码行来说明我遇到的问题。我尝试了 StackOverflow 用户的一些建议,但无济于事,因此希望您的反馈对我和未来的用户有所帮助。注意:此代码有效,除了设置 pdfREP 嵌套变量。

SETLOCAL 启用延迟扩展
设置 pdfREP=false

for /f "tokens=1" %%a in ('dir /o /b \\path2document\*.rp?') 做 (
    findstr "," \\path2log\%%a > 1.log
    如果不是错误级别 0 (
        :: 做点什么
        )
    如果错误级别 0 (
        findstr /B /I "p" \\path2document\%%a > 1.log
        如果错误级别 == 0 (
            设置 pdfREP=true
            回显 RSP 文件:%%a >> 2.log
        )
    )   
)

基本上问题是在 \path2document 我有多个文件,并且在每个文件中我都在寻找一个逗号。如果没有找到逗号,那么我想知道文件文本中是否有特定的字母。如果找到文本,我将先前定义的变量设置为 TRUE,而不是 FALSE。但是,如果语法不同(%errorlevel%==0,%errorlevel% EQU 0),“if errorlevel == 0”可以为真,并且它不会将变量 pdfREP 设置为 TRUE。如果问题是直到循环迭代之后才设置变量,那么我如何在其余代码中使用这个变量?我想稍后使用这个变量,所以设置它是最重要的。感谢您的任何反馈。

4

2 回答 2

2

Windows 批处理具有处理嵌套变量的“有趣”方式。 这篇文章可能会有所帮助。

就个人而言,当我的批处理文件变得如此复杂时,我会切换到另一种语言。我的首选通常是 Python,但如果您想留在 Microsoft 生态系统中,那么 vbscript 或 PowerShell 会起作用。

于 2012-06-12T20:57:34.130 回答
2

您正在滥用 IF 命令和 errorlevel 值。

IF 命令说明表明您可以直接在条件中使用 ERRORLEVEL 字,后跟一个表示给定错误级别的数字。这样,下面两个 IF 命令是对的:

if not errorlevel 0 (
    :: do something
    )
if errorlevel 0 (

但是,以下命令写得不好:

if errorlevel == 0 (

在这种情况下,您必须使用 !errorlevel! 表示在执行最后一行后获取当前的错误级别值:

if !errorlevel! == 0 (

独立于上述内容,这就是我这样做的方式:

if not errorlevel 0 (
    echo The errorlevel is less than zero 
) else if errorlevel 0 (
    echo The errorlevel is greater than zero
) else (
    echo The errorlevel is zero
)
于 2012-06-13T03:12:56.330 回答