Windows

尋找一種使用批處理文件替換目錄樹中非零大小文件的每個實例的方法

  • September 21, 2021

我試圖找出一種方法讓批處理腳本覆蓋特定目錄及其子文件夾中非零字節文件的每個實例。我猜,因為我正在尋找一個非零文件,如果它找不到任何非零大小的文件,我可能會用轉義符循環它?

例如,覆蓋每個非零文件大小的 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 的所有幫助!

工作程式碼:

@ECHO 關閉

設置 DPATH=%~dp0

FOR /R “%DPATH%” %%F IN ( ****** 見下文***) 如果 %%~zFGTR NEQ 0 CALL :NonEmptyFile “%%~F”

GOTO :EOF

:NonEmptyFile

ECHO 得到非空文件: %1

呼叫:EOF

*** 替換為您要替換的文件名,確保在某處使用單個字元萬用字元(我在副檔名中使用了它 - 例如,如果我正在搜尋 example.txt,我將 * 替換為 example.t ?t)

遍歷給定路徑和所有子文件和子路徑的最小批次,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

引用自:https://serverfault.com/questions/1076197