Windows / Batch / CLI |为什么if / else语句不适用于变量?

时间:2017-04-05 08:34:20

标签: windows batch-file command-line-interface

set format1=txt
set format2=pdf

for %%h in ('dir /B *.%format1%') do ( 
    if exists %%h (
        for %%i in (*.%format2%) do ( 
            copy "%%i" "pdf\%%i"
        )
    )
    else (
        copy "%%h" "txt\%%h"
    )
)

所以基本上,如果存在格式文件,请执行此操作,如果不存在,请执行其他操作。

如果我切换.bat文件,cmd窗口只会在最后以pause闪烁。

1 个答案:

答案 0 :(得分:0)

如果else放在行的开头,它将不是if命令的一部分,该行将被忽略或将打印错误消息。它需要结束括号。在外部,您需要使用for /f来解析命令输出或普通for。您应该使用if exist代替if exists

试试这样:

set format1=txt
set format2=pdf

for %%h in (*.%format1%) do ( 
    if exist "%%h" (
        for %%i in (*.%format2%) do ( 
            copy "%%i" "pdf\%%i"
        )
    ) else (
        copy "%%h" "txt\%%h"
    )
)