
배치 스크립트가 특정 디렉터리와 해당 하위 폴더 내부에 있는 0이 아닌 바이트 파일의 모든 인스턴스를 덮어쓰도록 하는 방법을 찾으려고 합니다. 0이 아닌 파일을 찾고 있기 때문에 0이 아닌 크기의 파일을 찾지 못하면 이스케이프를 사용하여 반복할 수 있을 것 같습니다.
예를 들어 파일 크기가 0이 아닌 example.txt의 모든 인스턴스를 덮어씁니다.
D:\
\---SubFolder1
| example.txt <10 bytes>
|
\---Subfolder2
| example.txt <0 bytes>
|
\---Subsubfolder1
example.txt <20 bytes>
이 예에서는 D:\Subfolder1\example.txt 및 D:\Subfolder2\Subsubfolder1\example.txt를 덮어쓰지만 D:\Subfolder2\example.txt는 변경되지 않습니다.
모든 도움을 주신 @NiKiZe에게 감사드립니다!
작업 코드:
@에코 꺼짐
DPATH 설정=%~dp0
/R "%DPATH%" %%F IN(*** 아래를 참조하세요) DO IF %%~zF
GTRNEQ0 CALL : NonEmptyFile "%%~F"
GOTO :EOF:NonEmptyFile
ECHO 비어 있지 않은 파일이 있습니다: %1
전화 : EOF
*** 바꾸려는 파일 이름으로 바꾸십시오. 어딘가에 단일 문자 와일드카드를 사용해야 합니다(확장자에서 사용했습니다. 예를 들어 example.txt를 검색하는 경우 *를 example.t로 바꿨습니다). ?티)
답변1
NonEmptyFile
비어 있지 않은 모든 파일에 대해 레이블을 호출하여 지정된 경로와 모든 하위 파일 및 하위 경로를 탐색하는 최소 배치입니다 .
@ECHO OFF
SET DPATH=%~dp0
FOR /R "%DPATH%" %%F IN (*) DO IF %%~zF GTR 0 CALL :NonEmptyFile "%%~F"
GOTO :EOF
:NonEmptyFile
ECHO Got non empty file: %1
CALL :EOF
기능에서 사용하면 %~1
확장되고 COPY /Y "somefile.txt" "%~1"
파일을 덮어쓰는 방법이 지정되지 않은 것과 같은 것을 사용할 수 있습니다.
"빈 파일"을 생성하는 또 다른 옵션은 다음과 같습니다.ECHO. > "%~1"
설명:
FOR /R "%DPATH%" %%F IN (*) DO
모든 파일을 탐색합니다IF %%~zF GTR 0
파일 크기가 다음보다 큰 경우 ...CALL :NonEmptyFile "%%~F"
:NonEmptyFile
이스케이프된 파일 이름으로 레이블을 호출합니다 .
프롬프트에서 이를 테스트하려면 다음을 사용하십시오.FOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"
다음을 for
실행하여 작동 방식에 대한 자세한 정보를 확인하세요.for /?
cmd