字符串与批处理文件比较
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" (
一个非常简单的批处理文件。我正在尝试搜索不是 .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" (