字符串与批处理文件比较

时间:2019-07-09 12:41:37

标签: batch-file environment-variables delayedvariableexpansion

一个非常简单的批处理文件。我正在尝试搜索不是.txt的文件扩展名。将有一个.txt,但其余的将类似于.txt_20190607。

for %%I in (\\01mtsdv130\Myapp\Log\*.*) do (
    set var1=%%~xI
    echo %var1
    if %var1%==".txt" ( 
       echo Matches
    ) else ( 
        echo does not match 
    )

)

我在该文件夹中既有.txt文件,又具有扩展名中的额外日期信息。我怎么了?

1 个答案:

答案 0 :(得分:1)

代码中有两个问题。

第一个是基于%的普通变量的扩展相当“静态”,因为它是在第一次解析/执行代码并在此之后将其固定后才发生的。这意味着在第一次循环之后的迭代中,%var1%的结果将不变。您必须使用!var1!(以及设置EnableDelayedExpansion)来获得所需的行为。

一种更简单的选择是完全摆脱var1,而只使用%%~xI

另一个问题是,CMD(几乎)将引号视为其他任何字符。最值得注意的是,字符串a"a"不被视为相等。因此,if应该看起来像这样:

if "%%~xI"==".txt" (