
特定のディレクトリとそのサブフォルダ内にある、ゼロ以外のバイトのファイルのすべてのインスタンスをバッチ スクリプトで上書きする方法を考えています。ゼロ以外のファイルを探しているので、ゼロ以外のサイズのファイルが見つからない場合は、エスケープを使用してループできると思いますか?
たとえば、ファイル サイズがゼロでない 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 (*** 以下を参照してください) %%~zF の場合に実行
GTRネク0 CALL :NonEmptyFile "%%~F"
GOTO :EOF:NonEmptyFile
ECHO 空でないファイルを取得しました: %1
呼び出し:EOF
*** 置き換えたいファイル名に置き換えます。必ずどこかで 1 文字のワイルドカードを使用してください (拡張子で使用しました。たとえば、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