Funktionierender Code:

Funktionierender Code:

Ich versuche, eine Möglichkeit zu finden, mit der ein Batch-Skript jede Instanz einer Datei mit einer Größe ungleich null Bytes in einem bestimmten Verzeichnis und seinen Unterordnern überschreibt. Ich vermute, da ich nach einer Datei mit einer Größe ungleich null suche, könnte ich sie wahrscheinlich mit einem Escape-Befehl in einer Schleife ausführen, wenn keine Datei mit einer Größe ungleich null gefunden wird?

Beispiel: Überschreiben Sie jede Instanz von example.txt, deren Dateigröße ungleich Null ist:

D:\
\---SubFolder1
    |   example.txt <10 bytes>
    |
    \---Subfolder2
        |   example.txt <0 bytes>
        |
        \---Subsubfolder1
                example.txt <20 bytes>

Im Beispiel würden D:\Subfolder1\example.txt und D:\Subfolder2\Subsubfolder1\example.txt überschrieben, aber D:\Subfolder2\example.txt würde nicht geändert.

Vielen Dank an @NiKiZe für all Ihre Hilfe!

Funktionierender Code:

@ECHO AUS

SETZEN SIE DPATH=%~dp0

FÜR /R "%DPATH%" %%F IN (*** SIEHE UNTEN) TUN, WENN %%~zFGTR NEQ0 CALL: NonEmptyFile "%%~F"
GOTO: EOF

:NonEmptyFile
ECHO Habe eine nicht leere Datei erhalten: %1
Rufen Sie an: EOF

*** Ersetzen Sie durch den Dateinamen, den Sie ersetzen möchten. Achten Sie darauf, irgendwo ein Platzhalterzeichen für ein einzelnes Zeichen zu verwenden (ich habe es in der Erweiterung verwendet – wenn ich beispielsweise nach example.txt suche, habe ich das * durch example.t?t ersetzt).

Antwort1

Minimaler Batch, der einen gegebenen Pfad und alle Unterdateien und Unterpfade durchläuft und das NonEmptyFileLabel für jede nicht leere Datei aufruft.

@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

Durch die Verwendung %~1in der Funktion wird es erweitert und Sie können etwas verwenden wie „ COPY /Y "somefile.txt" "%~1" Wie die Dateien überschrieben werden sollen, wurde nicht angegeben.“

Eine weitere Möglichkeit zum Erstellen "leerer Dateien" istECHO. > "%~1"

Erläuterung:

  • FOR /R "%DPATH%" %%F IN (*) DOdurchsucht jede Datei
  • IF %%~zF GTR 0wenn die Dateigröße größer ist als ...
  • CALL :NonEmptyFile "%%~F"Rufen Sie das :NonEmptyFileLabel mit dem maskierten Dateinamen auf

Um dies bei der Eingabeaufforderung zu testen, verwenden SieFOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"

Weitere Informationen zur Funktionsweise forerhalten Sie durch Ausführen for /?incmd

verwandte Informationen