![와일드카드 폴더에서 파일을 삭제하는 배치 파일](https://rvso.com/image/1476429/%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%20%ED%8F%B4%EB%8D%94%EC%97%90%EC%84%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%B0%EC%B9%98%20%ED%8C%8C%EC%9D%BC.png)
여러 디렉터리에서 파일을 삭제하는 배치 파일을 어떻게 만듭니까?
D:\L1\asdasda\L3\*.txt
D:\L1\dfghfghfh\L3\*.txt
D:\L1\tyutyugj\L3\*.txt
D:\L1\ytrtyrty\L3\*.txt
좋다:
D:
del "d:\L1\*\L3\*.txt"
barlop의 메모-질문자가 추가합니다-
나는 약 100개의 디렉토리를 가지고 있습니다. 폴더는 삭제하지 않고 파일만 삭제하고 싶습니다. 이들 모두에는 L3 폴더가 있으며 모두 동일한 확장자를 가진 일부 파일을 포함합니다. 임시 파일일 뿐 자동으로 삭제되지는 않습니다.
답변1
하위 폴더 이름에 와일드카드를 사용하여 동적으로 다른 이름을 가진 하위 폴더에서 삭제하는 배치 파일
와일드카드 폴더에서 파일을 삭제하는 배치 파일
다음은 항상 이러한 유형의 작업을 완료하는 데 사용하는 쉽고 간단한 배치 스크립트 예입니다. 설명된 대로 필요에 맞게 변수 폴더 경로를 연결했습니다.
샘플 배치 스크립트
(변수 루트 폴더와 하위 폴더를 맨 위에 설정하면 논리가 파일 에 대한 명령을 지정하고 완료함에 따라 디렉터리를 순회하는 나머지 마술을 수행하기 위해 루프가 그에 따라 반복됩니다 FOR /D
. )FOR
DEL /Q /F
*.txt
@ECHO ON
SET SourceDir=D:\L1
SET SourceSubDir=L3
:: --// note the asterisk wildcard after SourceDir in the first FOR /D loop using X as the variable
:: --// note the X variable appended to the beginning of the second FOR (no /D switch here) loop in the SET part using Y as the variable
FOR /D %%X IN ("%SourceDir%\*") DO FOR %%Y IN ("%%~X\%SourceSubDir%\*.txt") DO DEL /Q /F "%%~Y"
GOTO EOF
메모: 명령 프롬프트에서 수동으로 복사하여 붙여넣기를 사용하여 이를 실행하려는 경우 FOR
루프는 모든 부분에서 백분율 기호 중 하나를 제거해야 하므로 배치 스크립트가 아닌 복사 및 붙여넣기를 사용하여 수동으로 실행하고 위의 예가 작동하는 방식으로 실행하는 경우 해당 부분에 대해 아래를 사용하십시오.
FOR /D %X IN ("%SourceDir%\*") DO FOR %Y IN ("%~X\%SourceSubDir%\*.txt") DO DEL /Q /F "%~Y"
더 자세한 내용과 연구
(입력 FOR /?
이 세부 정보를 보려면 Windows 명령 프롬프트에서)
FOR(스위치 없음)
Runs a specified command for each file in a set of files.
FOR %variable IN (set) DO command [command-parameters]
%variable Specifies a single letter replaceable parameter.
(set) Specifies a set of one or more files. Wildcards may be used.
command Specifies the command to carry out for each file.
command-parameters
Specifies parameters or switches for the specified command.
To use the FOR command in a batch program, specify %%variable instead
of %variable. Variable names are case sensitive, so %i is different
from %I.
If Command Extensions are enabled, the following additional
forms of the FOR command are supported:
/D에 대해
FOR /D %variable IN (set) DO command [command-parameters]
If set contains wildcards, then specifies to match against directory
names instead of file names.
답변2
\L1\*\L3\* 줄을 해석합니다. As: 주어진 디렉토리 L1에 대해 하위 디렉토리 L3이 있는 모든 하위 디렉토리를 찾고 그 안에 있는 모든 파일을 삭제합니다.
디렉토리 구조를 탐색하려면 스크립트를 작성해야 합니다. 디렉터리나 파일 목록을 가져온 다음 반복 작업을 수행하는 방법이 있는 Perl이나 powershell을 사용해야 할 수도 있는 배치 파일로는 쉽게 수행할 수 없습니다.
의사 코드에서
Get list directories
For each dir
Cd into it
Check if The dir L3 exists
If it does then del .\L3\*.*
Go back up a level
Next dir
차이점을 확인하기 위해 Powershell에서 다시 실행할 생각이지만 이것에 대해 생각하고 배치 파일 코드에서 이 작업을 수행했습니다.
알았어 생각해 봤어
이 배치 파일은 실행되는 디렉토리 구조를 탐색하고 이름이 "L3"인 디렉토리의 내용을 삭제합니다.
@echo off
for /r %%d in (*) do call :process "%%d"
goto :eof
:process
pushd "%~dp1"
for /f "delims=" %%A in ('cd') do (
set foldername=%%~nxA
)
if "%foldername%"=="L3" del/q *.*
popd
goto :eof
더 간단하게 만드는 것이 가능할 수도 있지만 현재 디렉터리 이름만 가져오는 작업은 지저분합니다(프로세스 섹션의 for 루프).
디렉토리가 다음과 같이 시작되면
└───L1
│ 1.dat
│
├───Alice
│ │ 9.dat
│ │
│ └───L3
│ c.dat
│ d.dat
│
├───Bob
│ 6.dat
│
├───Carole
│ │ 2.dat
│ │
│ └───L3
│ a.dat
│ b.dat
│
└───Ted
6.dat
cleantree를 실행하면 다음과 같이 보일 것입니다.
└───L1
│ 1.dat
│
├───Alice
│ │ 9.dat
│ │
│ └───L3
├───Bob
│ 6.dat
│
├───Carole
│ │ 2.dat
│ │
│ └───L3
└───Ted
6.dat
답변3
for /f %G in ('dir /ad /b D:\L1\') do del D:\L1\%G\L3\*.txt
for /f
세트의 모든 파일에 대해 다음 do 명령을 실행합니다.
%G in ('dir /ad /b D:\L1\')
주어진 디렉토리 내의 각 폴더에 대한 기본 형식으로 설정된 변수
디렉토리에 대해 설정된 %G 값 및 와일드카드를 사용하는 삭제 명령
테스트 실행 먼저
실제로 실행하지 않고 명령을 테스트하기 위해 실행할 명령을 콘솔에 인쇄하려면 echo를 사용하여 실행하세요.
for /f %G in ('dir /ad /b D:\L1\') do echo del D:\L1\%G\L3\*.txt