在批处理文件中的if语句中调用python函数时的奇怪行为

时间:2015-08-13 12:32:28

标签: python batch-file python-3.x

每个人

我试图从批处理文件中调用python函数,特别是在if语句中(我使用python 3.3.2)。假设我有两个变量%filePath%和%filePath2%以及 getFileRevision.py 中的python函数。这是我的批处理脚本的一部分:

python getFileRevision.py %filePath%
set revision=%ERRORLEVEL%

python getFileRevision.py %filePath2%
set revision2=%ERRORLEVEL%

echo Before entering if statement:
echo revision=%revision%
echo revision2=%revision2%

python getFileRevision.py %filePath%
set revision=%ERRORLEVEL%

if exist %filePath2% (
    echo condition = true!
    python getFileRevision.py %filePath2%
    set revision2=%ERRORLEVEL%
)

echo revision=%revision%
echo revision2=%revision2%

我为两个不同的参数调用python函数并打印返回值。然后再做一次,但这次我在一个If语句中调用python函数。这是我的控制台中的打印内容:

    revision=109803
    revision2=109671
    condition = true!
    revision=109803
    revision2=109803

从这个结果中,你可以看到在If语句中调用python函数并没有改变返回值。有谁知道这种奇怪行为的原因以及如何解决它?

非常感谢。

1 个答案:

答案 0 :(得分:0)

在代码块内(括号内的任何代码),您无法使用'%'访问最新的变量值。您需要enabledelayedexpansion并使用!代替。

setlocal enabledelayedexpansion
python getFileRevision.py %filePath%
set revision=%ERRORLEVEL%

python getFileRevision.py %filePath2%
set revision2=%ERRORLEVEL%

echo Before entering if statement:
echo revision=%revision%
echo revision2=%revision2%

python getFileRevision.py %filePath%
set revision=%ERRORLEVEL%

if exist %filePath2% (
    echo condition = true!
    python getFileRevision.py %filePath2%
    set revision2=!ERRORLEVEL!
)

echo revision=%revision%
echo revision2=%revision2%

现在应该可以正常工作。