批处理文件变量在if语句中不起作用,即使延迟扩展也是如此?

时间:2017-06-27 20:44:13

标签: batch-file

我正在编写一个修改输入文件的批处理文件,但前提是文件名包含-source

这有效:

@echo off
@setlocal ENABLEDELAYEDEXPANSION

set fn=%1
echo Checking %fn%...
set outfile=%fn:-source=%
if not x%fn:-source=%==x%fn% (
    echo Output to %outfile%
)

但这不是:

@echo off
@setlocal ENABLEDELAYEDEXPANSION

set fn=%1
echo Checking %fn%...
if not x%fn:-source=%==x%fn% (
    set outfile=%fn:-source=%
    echo Output to %outfile%
)

在第二种情况下,它只输出"输出到"没有文件名。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是你的第二个剧本,我的评论回答以及关于双引号的一些额外改进。

"x%fn:-source=%"

作为补充说明,如果"x%fn%"等于If,则无需使用@Echo Off If "%~1"=="" Exit/B Set "fn=%~1" Echo Checking %fn%... Set "outfile=%fn:-source=%" Echo Output to %outfile% (进行不会改变价值的替换是无害的)

{{1}}