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

i3i*_*5i7 3 string comparison filenames batch-file

我试图做的基本上与这个问题相同,即我想循环遍历目录中的文件,但排除名称中包含特定字符串的文件(在我的例子中为“.new”。但是,问题是我正在使用的

setlocal DisableDelayedExpansion
Run Code Online (Sandbox Code Playgroud)

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

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

字符串匹配不起作用,即我明白了

Processing "file.mkv"    
Processing "file.new.mkv"
Run Code Online (Sandbox Code Playgroud)

任何关于我如何让它发挥作用的提示将不胜感激;谢谢!

Mag*_*goo 7

批量字符串操作命令不能直接应用于metavariableslike %%x

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

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