
我試圖找出一種方法,讓批次腳本覆蓋特定目錄及其子資料夾內非零位元組文件的每個實例。我猜因為我正在尋找一個非零文件,如果找不到任何非零大小的文件,我可能可以使用轉義循環它?
例如,覆寫 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
FOR /R "%DPATH%" %%F IN (*** 見下文) DO IF %%~zF
GTR新EQ0 CALL :NonEmptyFile "%%~F"
GOTO :EOF:NonEmptyFile
ECHO 得到非空檔:%1
呼叫:EOF
*** 替換為您要替換的檔案名,請務必在某處使用單字元通配符(我在擴展名中使用了它 - 例如,如果我正在搜尋 example.txt,我將 * 替換為 example.t ? 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