批处理文件,如果给出意外的结果/奇怪的逻辑

时间:2011-03-21 20:54:40

标签: batch-file if-statement

好的,所以我不确定这里发生了什么。我希望第二组眼睛显而易见。我正在执行一个If语句,无论如何都得到相同的结果......

if \%3\==\\ (set filter=FullExclude.txt) else (set filter=%3)
if %filter%==%3 (set output = CustomDiffData) else (set output = USERDATA) 
echo %output%

参数3正在custom.txt中输入

所以第一个如果应该有false并且filter设置为custom.txt,则会通过echo确认。

接下来如果应该是true,因为custom.txt = custom.txt ...这是事情变得奇怪的地方因为输出回声USERDATA 如果我这样做,甚至更奇怪:

if %filter%==%3 (set output = USERDATA) else (set output = CustomDiffData)
echo %output%

我仍然收到USERDATA回复。

为什么会这样?

这是我脚本的顶部减去两个只是结束脚本的空参数检查。

1 个答案:

答案 0 :(得分:2)

主要问题是set output =...使用名为output<space>而非output的变量。

您应该避免批处理文件中的(不必要的)空格。

另一个问题可能在if \%3\==\\行,因为%3可能包含空格或特殊字符,这会因批处理错误而失败。
最好使用像这样的引号 if“%~3”==“”(设置filter = FullExclude.txt)else(设置“filter =%~3”)

为避免第二次比较,您可以将代码更改为

if "%~3"=="" (
    set filter=FullExclude.txt
    set output=USERDATA
) else (
    set "filter=%~3"
    set output=CustomDiffData
)
echo %output%