预告:我对批处理或编程都是新手,所以请尽可能多地解释。
我的问题是:
我想删除目录Z (ex )中的所有文件夹,而不是名为X和Y的。D:\\测试\z)
因此,假设Z包含以下文件夹:
我只需要排除通过脚本删除备份和资源。
我查找了多个解决方案,因为它不只是删除具有特定名称的一个文件夹,但我不知道是否可以使用批处理实现多个值。
发布于 2016-03-22 11:14:54
未测试:
@echo off
set "root_dir=C:\Z"
set "exclude_list=backup resources"
pushd "%root_dir%"
for /f "tokens=* delims=" %%# in ('dir /b /a:d^| findstr /v "%exclude_list%"') do (
echo rd /s /q "%%~f#"
)如果这看起来不错,请删除最后一行的echo以激活删除。
如果要删除的所有文件夹都类似于project*,也可以尝试:
for /d %%a in ("project*") do rd /s /q "%%~fa"发布于 2016-03-22 12:02:28
@echo off
setlocal EnableDelayedExpansion
rem Define working variables
set "dir=D:\Test\z"
set "exclude=/backup/resources/"
rem Change current dir to working dir
cd /D "%dir%"
rem Process all folders in this dir
for /D %%f in (*) do (
rem If current folder is not in "exclude" var
if "!exclude:/%%f/=!" equ "%exclude%" (
rem Delete it
ECHO rd /s /q "%%f"
)
)此方法仅使用内部cmd.exe命令,因此它比其他可能使用外部.exe文件(如findstr.exe)的方法运行得更快。
检测名称是否在排除变量中的方法是尝试从该变量中删除该名称:"%exclude:/%%f/=%":如果结果等于原始变量内容,则文件夹不存在。该方法非常简单和高效,并且工作原理与字母大小写无关,因此它不需要在/I命令中使用任何忽略大小写开关。
名称用斜杠分隔,以避免部分名称匹配造成的任何问题;为此,%%f部件被if命令中的斜杠括起来。
注意,%%f的值在for命令的每次迭代中都会发生变化。因此,exclude变量被感叹号包围,而不是百分号,setlocal EnableDelayedExpansion命令在开始时就给出了;否则,%展开%将在for命令开始迭代之前只执行一次。你可以在这个论坛上寻找“延迟扩展”,以进一步解释这一点。
https://stackoverflow.com/questions/36152772
复制相似问题