2015-09-06 114 views
0

我想删除用于创建videofile.mp4的目录/子目录中的文件。问题是,尽管所有文件都以相同的文件名开头,但有些文件名在创建过程中被添加了,因此%%〜na不会捕获所有文件名。文件夹中的文件示例是videofile.mp4 videofile.ac3 videofile.m2v videofile-02.ac3。使用回声代替起始者的删除:使用通配符在for循环中扩展文件名

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

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

+0

请使用正确的代码格式,通过选择代码并点击'{}'符号下一次上 –

回答

0

我已经试过:

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

和它的工作对我来说(如果我没有误解你的意图)。

以另一种方式:那岂不是不够用:

for /r %%a in ("*.mp4") do (del /s %%~na*.*) 
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 
)