루트 및 하위 주문의 특정 폴더를 삭제하고 싶습니다. 문제는 내 코드가 디렉터리 루트의 폴더만 삭제한다는 것입니다.
SET dirname=test
SET directory=%cd%
SET found=false
if NOT "%1%" == "" (
set directory=%1%
)
echo Searching for %dirname% in %directory%
for /d %%i in (%directory%\%dirname%) do (
IF EXIST %%i (
REM change the sentinel value
set found=true
echo Deleting the folder %%i
REM Delete a folder, even if not empty, and don't prompt for confirmation
RD /s /q %%i
)
)
REM logic to do if no files were found
if NOT "%found%" == "true" (
echo No directories were found with the name of %dirname%
)
폴더 구조는 다음과 같습니다.
E:sampledelete
├───folder1
├───folder2
│ └───somefolder
├───test
│ └───somefolder
├───newfolder
│ ├───test
│ │ └───somefolder
├───newfolder2
│ ├───test
스크립트를 실행한 후 다음과 같이 변경되었습니다.
E:sampledelete
├───folder1
├───folder2
│ └───somefolder
├───newfolder
│ ├───test
│ │ └───somefolder
├───newfolder2
│ ├───test
답변1
문제는 아래에 주석으로 표시되어 있습니다. 주요 문제는 디렉토리에 대한 오해였습니다. 즉, 루트 아래의 1개 노드 아래에 있는 디렉토리 내부를 보고 있지 않았습니다. 당신은 올바른 생각을 가지고있었습니다. 당신이 말했듯이 당신은 "새로운" 것이므로 차이점을 분석해 볼 가치가 있습니다.
@echo off
SET dirname=test
SET directory=%cd%
SET found=false
if NOT "%1%" == "" (
set directory=%1%
)
REM We want to look in the current directory not in for Z:\test
for /d %%i in (%directory%*) do (
echo Searching for %%i\%dirname% in %directory%
REM We already know the folder existed because "do" ran.
REM We want to look beneath the root directory
IF EXIST %%i\%dirname% (
REM change the sentinel value
set found=true
REM we want to delete the nodes beneath not the one in root
echo Deleting the folder %%i\%dirname%
REM Delete a folder
REM we want to delete the nodes beneath not the one in root
RD /s /q %%i\%dirname%
)
IF %%1 == %dirname% (
REM change the sentinel value
set found=true
REM Delete a folder, even if not empty, and don't prompt for confirmation
echo Deleting the folder %%i\%dirname%
RD /s /q %%i
)
)
REM logic to do if no files were found
if NOT "%found%" == "true" (
echo No directories were found with the name of %dirname%
)
답변2
당신은 무엇을 오해 for /d
하고 있습니다.
/d %%i의 경우(디렉토리 1 파일 1 디렉토리 2 파일 2 디렉토리 3 파일 3) 하다성명
하다
SET %%i=dir1
statement
SET %%i=dir2
statement
SET %%i=dir3
statement
문제는 당신이 단지 , 어디에 있는지 말하고 있다는 것입니다 . 재귀적 디렉터리 검색을 수행하는 을(를) 사용하려고 합니다 . 루프는 다음과 같아야 합니다.for /d %%i in (dir1) do statement
dir1
%directory%\%dirname%
for /r
for /r %directory% %%i in (.) do (
if exist %%i\%dirname% (
REM change the sentinel value
set found=true
echo Deleting the folder %%i\%dirname%
REM Delete a folder, even if not empty, and don't prompt for confirmation
RD /s /q %%i\%dirname%
)
)