我想删除用于创建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的文件名部分?
答案 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*.*)