Fai*_*yle 35 window batch-file xbmc
我有一个目录:
D:\Movies
D:\Movies\MovieTitle1\backdrops\
D:\Movies\MovieTitle2\backdrops\
D:\Movies\MovieTitle3\backdrops\
D:\Movies\MovieTitle4\backdrops\
Run Code Online (Sandbox Code Playgroud)
我怎么能有一个批处理文件删除所有名为"Backdrops"的文件夹?如果可能的话,我希望它只从D:\驱动器运行递归.
itd*_*itd 66
简短回答:
FOR /d /r . %d IN (backdrops) DO @IF EXIST "%d" rd /s /q "%d"
Run Code Online (Sandbox Code Playgroud)
我从Stack Overflow上同一个问题的无数答案中找到了答案:
命令行工具在Windows中以递归方式删除具有指定名称的文件夹?
此命令未经过测试,但我确实相信此站点足以发布此答案.
正如Alex在评论中所建议的那样,这个批处理脚本应该是万无一失的:
D:
FOR /d /r . %d IN (backdrops) DO @IF EXIST "%d" rd /s /q "%d"
Run Code Online (Sandbox Code Playgroud)
上面的答案对我来说不是很有效。我不得不结合使用@itd解决方案和@Groo注释。对他们表示敬意。
对我来说,最终的解决方案是(使用背景文件夹示例):
FOR /d /r . %%d IN ("backdrops") DO @IF EXIST "%%d" rd /s /q "%%d"
Run Code Online (Sandbox Code Playgroud)
我将打开一个不同的答案,因为它在评论中太局促了。有人问要做什么,如果你想从/到不同的文件夹执行,我想举一个非递归删除的例子。
首先,当你在cmd中使用命令时,你必须使用%d,但是当你在.bat中使用它时,你必须使用%%d.
您可以使用通配符仅处理以“backdrops”开头的文件夹:"backdrops*"。
递归删除从 .bat 所在文件夹开始的文件夹:
FOR /d /r . %d IN ("backdrops") DO @IF EXIST "%d" rd /s /q "%d"
非递归删除 .bat 所在文件夹中的文件夹(与通配符一起使用,因为无论如何您不能拥有多个同名文件夹):
FOR /d %d IN ("backdrops*") DO @IF EXIST "%d" rd /s /q "%d"
从您选择的文件夹开始递归删除文件夹:
FOR /d /r "PATH_TO_FOLDER" %d IN ("backdrops") DO @IF EXIST "%d" rd /s /q "%d"
非递归删除您选择的文件夹中的文件夹(与通配符一起使用,因为无论如何您不能拥有多个同名文件夹):
FOR /d %d IN ("PATH_TO_FOLDER/backdrops*") DO @IF EXIST "%d" rd /s /q "%d"
我从.Net开发者的角度来看这个问题。有时需要从执行批处理脚本的目录开始递归地擦除所有 */bin/ 和 */obj/ 子文件夹。我尝试了上述解决方案并看到了一个关键点:
与 FOR 命令的其他变体不同,您必须在“folder_set”中包含通配符(* 或 ?)才能获得一致的返回结果。
来源: https: //ss64.com/nt/for_d.html
在删除每个找到的结果之前添加回显时,我们可以确保不存在误报匹配。当我这样做时,我发现使用不带通配符的 (obj)folder_set 会触发每个子文件夹的 DO 表达式,即使它与掩码不匹配。例如删除“/.git/objects/”目录,这是不好的。在掩码末尾添加问号(除了点之外的任何符号出现 0 或 1 次)可以解决此问题:
@echo off
FOR /d /r %%F IN (obj?) DO (
echo deleting folder: %%F
@IF EXIST %%F RMDIR /S /Q "%%F"
)
FOR /d /r %%F IN (bin?) DO (
echo deleting folder: %%F
@IF EXIST %%F RMDIR /S /Q "%%F"
)
Run Code Online (Sandbox Code Playgroud)
对于任何其他面具也是如此。例如(包?)和(node_modules?)擦除缓存的库以使备份存档更加轻量级。