批处理文件循环 - 如果文件名包含字符串,则跳过文件

时间:2018-02-21 07:15:08

标签: string batch-file comparison filenames

我尝试与this question中的基本相同,即我想循环遍历目录中的文件,但排除在其名称中包含某个字符串的文件(在我的情况下为“.new”。)但问题是我正在使用

setlocal DisableDelayedExpansion

因为我希望批处理也能使用包含感叹号的文件名。因此我尝试使用循环变量%% x而不是新变量来使解决方案正常工作,但这似乎不起作用:

setlocal DisableDelayedExpansion
For %%x in (*.mkv *.mp4) do (
  If "%%x" == "%%x:.new." (
    Echo Skipped "%%x"
  ) Else (
    Echo Processing "%%x"
  )
)

字符串匹配不起作用,即我得到

Processing "file.mkv"    
Processing "file.new.mkv"

我将非常感谢任何关于如何使其发挥作用的暗示;谢谢!

1 个答案:

答案 0 :(得分:1)

批量字符串操作命令无法直接应用于metavariables %%x

echo %%x|findstr /i /L ".new.">nul
if errorlevel 1 (
 echo process %%x
) else (
 echo skip %%x
)

应该适合您,从字面上找到字符串.new. /l/i不区分大小写。如果找到则将errorlevel设置为0,否则设置为非{0}。