字符串与批处理文件比较

String compare with batch file

一个非常简单的批处理文件。我正在尝试搜索不是 .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 文件和扩展名为额外日期信息的文件。我有什么问题吗?

代码中有两个问题。

第一个是基于 % 的普通变量扩展相当 "static",因为它发生在第一次代码是 parsed/executed 并且此后固定。这意味着在第一次循环之后的迭代中,%var1% 的结果将 而不是 改变。您必须使用 !var1!(连同设置 EnableDelayedExpansion)才能获得您想要的行为。

一个更简单的替代方法是完全摆脱 var1 并只使用 %%~xI.

另一个问题是 CMD 将引号(几乎)视为任何其他字符。最值得注意的是,字符串 a"a" 不被视为相等。因此,if 应如下所示:

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