在for循环中使用通配符扩展文件名

时间:2015-09-06 23:03:33

标签: batch-file cmd

我想删除用于创建videofile.mp4的目录/子目录中的文件。问题是虽然所有文件都以相同的文件名开头,但有些文件名在创建过程中附加了文件名,因此%%〜na不会捕获所有文件名。文件夹中的文件示例是videofile.mp4 videofile.ac3 videofile.m2v videofile-02.ac3。使用echo代替首发删除:

for /r %%a in ("*.mp4") do (echo "%%~dpna.m2v" "%%~dpna.ac3")

这会跳过videofile-02.ac3。在do括号内添加*作为通配符会导致*的字面解释,无论我在哪里尝试插入*。有没有办法用通配符扩展%% a的文件名部分?

2 个答案:

答案 0 :(得分:1)

出于调试目的,使用dir代替echo,因为dir会对*这样的通配符del字符进行处理:

for /r %%a in ("*.mp4") do (
   dir /B /S "%%~dpna*.m2v" 2>NUL | findstr /I "%~dpna"
   dir /B /S "%%~dpna*.ac3" 2>NUL | findstr /I "%~dpna"
)

在上面的代码段中:

  • dir /B /S以裸格式显示带有(完全)限定路径的文件(无标题信息或摘要);
  • 2>NUL抑制File Not Found消息;
  • | findstr /I "%~dpna"禁止在子目录中显示文件。

一旦(不早)调试:

for /r %%a in ("*.mp4") do (
   del /F /Q "%%~dpna*.m2v" 2>NUL
   del /F /Q "%%~dpna*.ac3" 2>NUL
)

答案 1 :(得分:0)

我试过了:

for /r %%a in ("*.mp4") do (echo "%%~dpna.m2v" "%%~dpna*.ac3")

它对我有用(如果我没有误解你的意图)。

另一种方式:对于:

是不够的
for /r %%a in ("*.mp4") do (del /s %%~na*.*)