와일드 카드 폴더에서 파일을 삭제하는 배치 파일


1

여러 디렉터리에서 파일을 삭제하는 배치 파일은 어떻게 만듭니 까?

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-questioner가 덧붙인 메모 -

약 100 개의 디렉토리가 있습니다. 폴더 만 삭제하고 싶지는 않습니다. 그들 모두는 L3 폴더를 가지고 있으며, 그것들은 모두 같은 확장자를 가진 몇몇 파일들을 포함하고 있습니다. 임시 파일 일 뿐이므로 자동으로 삭제되지 않습니다.


당신은 당신이 얻은 오류를 진술하지 않았습니다.
barlop

너는 말할 수있다. del a.a b.b
barlop

"& amp; # 42;"입니까? 정말로 파일 이름 (여기에서 작동하는 삭제) 또는 불필요한 HTML 마크 업 (실제 파일 이름 만 기입하십시오)입니까?
Werner Henze

죄송합니다. 이전에는 * 제대로 표시 할 수 없었기 때문에 HTML 코드를 사용하여 (*) 표시했습니다. 하지만 왜 지금은 작동하는지 모르겠습니다.
Andrew Lay

오 와일드 카드가있는 rmdir처럼 싶습니다. 내가 뭘 할 것 같아요. 나는 삭제하려는 파일의 목록을 파일로 가져옵니다. 그럼 난 그들 앞에 단어 "델"을 얻을거야, 그리고 배치 파일을 만들고 그것을 실행하십시오. 그것은 매우 안전합니다. 그러면 삭제 된 내용을 정확히 볼 수 있습니다. 메모장 + +에서 파일 목록을 열고 ^로 각 줄의 시작 부분을 찾고 "del"로 바꿀 수 있습니다.
barlop

답변:


0

서브 파일 이름에 와일드 카드를 사용하여 다른 이름으로 서브 폴더에서 삭제할 파일을 배치하십시오.

와일드 카드 폴더에서 파일을 삭제하는 배치 파일

다음은이 유형의 작업을 항상 완료하는 데 사용하는 쉽고 간단한 배치 스크립트 예제입니다. 사용자가 설명하는대로 변수 폴더 경로를 필요에 맞게 연결했습니다.

샘플 배너 스크립트

(변수 루트 폴더와 하위 폴더를 위로 설정하고 FOR /DFOR 루프는 논리가 지정하고 완료 할 때 디렉토리를 가로 지르는 나머지 마술을 수행하도록 반복합니다. 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:

FOR / 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.

0

줄 바꾸기 \ L1 \ * \ L3 \ *. 다음과 같이 : 주어진 디렉토리에 대해 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에서 다시 시도 할 생각입니다.

Ok 나는 그것을 생각했다.

이 배치 파일은에서 실행되는 디렉토리 구조를 처리합니다. 이름이 "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

클린 트리를 실행하면 다음과 같이 보일 것입니다.

└───L1
    │   1.dat
    │
    ├───Alice
    │   │   9.dat
    │   │
    │   └───L3
    ├───Bob
    │       6.dat
    │
    ├───Carole
    │   │   2.dat
    │   │
    │   └───L3
    └───Ted
            6.dat

0
for /f %G in ('dir /ad /b D:\L1\') do del D:\L1\%G\L3\*.txt

for /f set의 모든 파일에 대해 do 명령을 실행합니다.

%G in ('dir /ad /b D:\L1\') 주어진 디렉토리 내의 각 폴더에 대한 베어 형식으로 설정된 변수

set % G 값을 사용하여 명령을 삭제 & amp; 디렉토리에 대한 와일드 카드


먼저 테스트 실행

실제로 명령을 실행하지 않고 명령을 테스트하기 위해 실행할 명령을 콘솔에 인쇄하려면 echo와 함께 실행하십시오.

for /f %G in ('dir /ad /b D:\L1\') do echo del D:\L1\%G\L3\*.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.