Удалить все кроме двух папок с .bat файлом - PullRequest
0 голосов
/ 25 апреля 2018

Пакетная

@echo off
set folder="c:\FTP\"
set keep="keep1"
set keeptwo="keep2"

cd /d %folder%

for /F "delims=" %%i in ('dir /b') do (
    if /i "%%~ni" NEQ %keep% if /i "%%~ni" NEQ %keeptwo% (rmdir "%%i" /s/q || del "%%i" /s/q)
)

pause

Положение

  • folder1 / file1.txt
  • folder2 / file1.txt
  • keep1 / file1.txt
  • keep2 / file1.txt
  • file1.txt

Ожидаемый результат

Мне нужно сохранить папки «keep1» и «keep2» и все включенные файлы, но «folder1» и «folder2» и «file1.txt» со всеми подкаталогами и файлами должны быть удалены.

Текущий результат

Удаляет все файлы во всех папках, удаляет «folder1» и «folder2» и сохраняет «keep1» и «keep2»

Любая подсказка, чего мне не хватает.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Я предполагаю, что это то, что вы хотели сделать:

@Echo Off
Set "folder=C:\FTP"
Set "keep=keep1"
Set "keeptwo=keep2"

CD /D "%folder%" 2>Nul || Exit /B
Del /F/A/Q *
For /D %%A In (*) Do If /I Not "%%A"=="%keep%" If /I Not "%%A"=="%keep2%" RD /S/Q "%%A"
Pause
0 голосов
/ 25 апреля 2018

Вы не можете использовать опцию /S с командой DELETE, поскольку это приведет к удалению файла в текущем каталоге и во всех его подкаталогах.

Независимо от этого, именно так я бы выполнил задачу, такчто вы не получите ошибку от команды RMDIR.Я использую команду IF EXIST, чтобы определить, является ли это файл или каталог.

@echo off
set "folder=c:\FTP\"
set "keep=keep1"
set "keeptwo=keep2"

cd /d %folder%

for /F "delims=" %%G in ('dir /b') do (
    if /I NOT "%%G"=="%keep%" (
        if /I NOT "%%G"=="%keeptwo%" (
            REM check if it is a directory or file
            IF EXIST "%%G\" (
                rmdir "%%G" /s /q
            ) else (
                del "%%G" /q
            )
        )
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...