작업 코드:

작업 코드:

배치 스크립트가 특정 디렉터리와 해당 하위 폴더 내부에 있는 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 %%~zFGTR NEQ0 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

관련 정보