スクリプトの各部分を説明するために、このコメントの別の解決策を次に示します。
@Echo OFF
REM Important that Delayed Expansion is Enabled
setlocal enabledelayedexpansion
REM This sets what folder the batch is looking for and the root in which it starts the search:
set /p foldername=Please enter the foldername you want to delete:
set /p root=Please enter the root directory (ex: C:\TestFolder)
REM Checks each directory in the given root
FOR /R %root% %%A IN (.) DO (
if '%%A'=='' goto end
REM Correctly parses info for executing the loop and RM functions
set dir="%%A"
set dir=!dir:.=!
set directory=%%A
set directory=!directory::=!
set directory=!directory:\=;!
REM Checks each directory
for /f "tokens=* delims=;" %%P in ("!directory!") do call :loop %%P
)
REM After each directory is checked the batch will allow you to see folders deleted.
:end
pause
endlocal
exit
REM This loop checks each folder inside the directory for the specified folder name. This allows you to check multiple nested directories.
:loop
if '%1'=='' goto endloop
if '%1'=='%foldername%' (
rd /S /Q !dir!
echo !dir! was deleted.
)
SHIFT
goto :loop
:endloop
プロンプトが表示されたくない場合/p
は、初期変数の前から取り出して、の後に値を入力することができます。=
set foldername=
set root=
バッチをサイレントに実行するためにecho
、ループ部分と終了部分のを削除することもできます。pause
もう少し複雑かもしれませんが、コードは他の多くの用途に適用できます。
同じフォルダ名の複数のインスタンスを探してテストしqwerty
ましたC:\Test
:
C:\Test\qwerty
C:\Test\qwerty\subfolder
C:\Test\test\qwerty
C:\Test\test\test\qwerty
残ったのは:
C:\Test\
C:\Test\test\
C:\Test\test\test\