如何使用批处理脚本中的for循环排除要删除的文件夹?

时间:2019-05-13 23:11:33

标签: batch-file cmd windows-10 file-handling

我正在尝试使用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以外的所有文件夹

2 个答案:

答案 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
)