Удаление пустых каталогов в пакете с исключениями - PullRequest
0 голосов
/ 15 октября 2018

Я недавно начал создавать несколько небольших пакетных файлов, так как я думаю, что пакетный сам по себе интересен, но также потому, что он помогает автоматизировать некоторые вещи, которые я делаю на регулярной основе.

Сценарий, который яработает над программой, которая удаляет все каталоги в папке (на данный момент вставляется как% UserProfile%) и позволяет игнорировать все записи в файле исключений.Я не хочу точных путей, я хотел, чтобы, если исключение присутствовало где-либо в пути к папкам, его нужно было исключить.

Вот что у меня есть (Имейте в виду, я не оченьхорошо):

@ECHO OFF

CD %UserProfile%

SET /A Violation=0
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 CALL :DIREXPANDER "%%D"
ECHO Scan Finished at %TIME% >> "%UserProfile%\Log.txt"
GOTO:EOF

:DIREXPANDER
    SET /A Violation=0
    SET Directory=%1
    ECHO %Directory%
    FOR /F %%X IN (%ExceptionFile%) DO (
        SET "Exception=%%X"
        ECHO %Directory% Compared to %Directory:!Exception!=% >>  "%UserProfile%\Test.txt"
        If NOT %Directory%==%Directory:!Exception!=% (
            ECHO EXCEPTION: %Directory% Violates !Exception! >> "%UserProfile%\Log.txt"
            REM SET /A Violation=1
        )
    )

    IF %Violation%==0 (
        RMDIR %Directory% 2>NUL && ECHO DELETION: %Directory% >> "%UserProfile%\Log.txt"
    )
    GOTO:EOF

Если я заменю! Исключение!С реальной строкой она работает просто отлично, но при использовании переменной она не работает.

Спасибо за любые предложения или проблемы, которые вы заметили!

1 Ответ

0 голосов
/ 15 октября 2018

Уверен, что вы можете написать это, не используя CALL для метки.

@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 секунд быстрее на моем компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...