我正在尝试使用for循环删除用户定义位置中的所有内容,但一个预定义文件夹中的异常除外。我如何添加一个异常,以不删除文件夹。
我正在尝试学习编码,但是我承认我正在做一些简单的步骤。对于此脚本的第一个输入部分,我有一些出色的技巧,但是我缺乏前进的知识。我已经搜索并找到了类似的代码,但是似乎没有任何作用。该脚本旨在进行飞行模拟,并希望减轻安装特定物品的工作量。
由于stackoverflow准则,这只是代码的一部分,它将删除所有内容,包括我要排除的文件夹。 ...
Rem This code is intended to delete all except one pre-defined folder
Echo Deleting all the files except testmappe3
del /s /q "%CD%"
for /d %%p in ("%CD%") do rmdir "%%p" except "%%testmappe3" /s /q
dir
Pause
...
我希望输出内容删除除testfolder3以外的所有文件夹
答案 0 :(得分:2)
for /d %%A in ("%CD%\*") do (
set "except="
if /i "%%~nxA" == "testmappe3" set "except=1"
if not defined except rmdir /s /q "%%~A"
)
此代码将迭代当前目录中的文件夹。
如果文件夹的 n ame + e x 张力为testmappe3
,
那么except
将被设置为1
,即用一个值定义。
如果未定义except,rmdir
将删除该文件夹。
您可以添加更多if
行用于将文件夹检查到除外。
修饰符将识别文件夹,例如named
testmappe3.test1
为 n testmappe3
,并且
.test1
的e x 张力。
查看for /?
和call /?
有关修饰符的信息。
查看for /?
,set /?
,if /?
和rmdir /?
帮助这些命令。
答案 1 :(得分:2)
首先,我非常非常小心地使用%cd%
删除所有内容,尤其是如果脚本可能意外地以管理员身份运行,则%cd%
将是{{ 1}}。
请使用c:\windows\system32
作为路径,以确保您位于正确的目录中。所有这些都假定您没有在脚本中的其他位置%~dp0
处
然后是实际问题,我将包括findstr以排除目录testmappe3以及脚本本身。
cd
如果您要坚持原始的delete方法,则如下所示,但是如果您的脚本位于相同的目录中,则它也会被删除:
@echo off
cd /d "%~dp0"
for /f %%p in ('dir /b ^| findstr /vi /r /c:^testmappe3$') do (
rmdir "%%p" /s /q >nul 2>&1
if not "%%p"=="%~nx0" del /s /q "%%p" >nul 2>&1
)
如果要排除的文件夹包含空格,则需要双引号。即
@echo off
cd /d "%~dp0"
del /s /q *
for /f %%p in ('dir /b ^| findstr /vi /r /c:^testmappe3$') do (
rmdir "%%p" /s /q >nul 2>&1
)