動作コード:

動作コード:

特定のディレクトリとそのサブフォルダ内にある、ゼロ以外のバイトのファイルのすべてのインスタンスをバッチ スクリプトで上書きする方法を考えています。ゼロ以外のファイルを探しているので、ゼロ以外のサイズのファイルが見つからない場合は、エスケープを使用してループできると思いますか?

たとえば、ファイル サイズがゼロでない 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

関連情報