Batch file 批量删除空目录时出现异常

Batch file 批量删除空目录时出现异常,batch-file,cmd,Batch File,Cmd,我最近开始创建一些小的批处理文件,因为我认为批处理本身很有趣,但也因为它有助于自动化我经常做的一些事情 我正在使用的脚本是一个程序,它删除文件夹中的所有目录(现在作为%UserProfile放入),并允许忽略异常文件中的所有实体。我不想要精确的路径,我想要这样,如果异常出现在文件夹路径的任何地方,那么它需要被排除 以下是我所拥有的(记住我不是很好): 如果我更换!例外对于实际的字符串,它工作得很好——但是当使用变量时,它似乎不起作用 感谢您提出的任何建议或问题 非常确定您可以在不使用标签调用的情

我最近开始创建一些小的批处理文件,因为我认为批处理本身很有趣,但也因为它有助于自动化我经常做的一些事情

我正在使用的脚本是一个程序,它删除文件夹中的所有目录(现在作为%UserProfile放入),并允许忽略异常文件中的所有实体。我不想要精确的路径,我想要这样,如果异常出现在文件夹路径的任何地方,那么它需要被排除

以下是我所拥有的(记住我不是很好):

如果我更换!例外对于实际的字符串,它工作得很好——但是当使用变量时,它似乎不起作用


感谢您提出的任何建议或问题

非常确定您可以在不使用标签调用的情况下编写此文档

@ECHO OFF

CD %UserProfile%

SET "ExceptionFile=%*"

SETLOCAL ENABLEDELAYEDEXPANSION
SHIFT
ECHO Starting...

ECHO Scan started at %TIME% > "%UserProfile%\Log.txt"
FOR /f "usebackq delims=" %%D in (`"dir /ad/b/s | sort /R"`) DO (
    SET "Violation=0"
    SET "Directory=%%D"
    ECHO %%D
    FOR /F %%X IN (%ExceptionFile%) DO (
        ECHO %%D Compared to !Directory:%%X=! >>  "%UserProfile%\Test.txt"
        If NOT "%%D"=="!Directory:%%X=!" (
            ECHO EXCEPTION: %%D Violates %%X >> "%UserProfile%\Log.txt"
            SET "Violation=1"
        )
    )
    IF "!Violation!"=="0" (
        RMDIR "%%D" 2>NUL && ECHO DELETION: %%D >> "%UserProfile%\Log.txt"
    )
)

ECHO Scan Finished at %TIME% >> "%UserProfile%\Log.txt"

这个嵌套代码在我的计算机上快了5秒。

您可以使用
FINDSTR
命令大大简化这个过程。
FINDSTR
命令可以使用异常文件作为输入。然后,您所需要做的就是检查
FINDSTR
命令的errorlevel。@Squashman我有这个命令,它确实有效。唯一的问题是FINDSTR的速度非常慢,关键是速度非常快,可能会扫描整个驱动器。批量扫描时,速度是不可能的,只是慢还是慢取决于你在做什么。你使用了错误的技术。鼠标前面的命令提示符是操作计算机。启动程序并复制一两个文件。它以文本形式工作,而其他所有Windows语言都会以某种方式编译。@CatCat我知道,但我想知道该程序是否可以在当前的情况下工作,因为操作字符串更容易,并且当前可以使用静态字符串。您的异常文件有多大?我发现很难相信它会比调用函数,然后解析异常文件的每一行,然后执行子字符串以查看它是否在异常文件中更慢。
@ECHO OFF

CD %UserProfile%

SET "ExceptionFile=%*"

SETLOCAL ENABLEDELAYEDEXPANSION
SHIFT
ECHO Starting...

ECHO Scan started at %TIME% > "%UserProfile%\Log.txt"
FOR /f "usebackq delims=" %%D in (`"dir /ad/b/s | sort /R"`) DO (
    SET "Violation=0"
    SET "Directory=%%D"
    ECHO %%D
    FOR /F %%X IN (%ExceptionFile%) DO (
        ECHO %%D Compared to !Directory:%%X=! >>  "%UserProfile%\Test.txt"
        If NOT "%%D"=="!Directory:%%X=!" (
            ECHO EXCEPTION: %%D Violates %%X >> "%UserProfile%\Log.txt"
            SET "Violation=1"
        )
    )
    IF "!Violation!"=="0" (
        RMDIR "%%D" 2>NUL && ECHO DELETION: %%D >> "%UserProfile%\Log.txt"
    )
)

ECHO Scan Finished at %TIME% >> "%UserProfile%\Log.txt"