Alle Dateien in einem Verzeichnis per Batch verschieben, die einen bestimmten Textinhalt NICHT beinhalten
Hallo,
ich habe folgenden Befehl der alle Dateien in einem bestimmten Verzeichnis mit bestimmten Textinhalt verschiebt und so auch funktioniert:
FOR /F %%i IN ('findstr /M "OK" c:\import\*2016*.txt') DO move /y %%i e:\import\OK
Ich benötige jedoch dies genau umgekehrt:
Alle Dateien die NICHT "OK" im Dateiinhalt enthalten in den Ordner "e:\temp\fehlerhaft" zu verschieben.
Das ganze sollte nach Möglichkeit auf Performance getrimmt sein, da die Batch täglich ca. 2GB und 10.000 Dateien übers Netzwerk verschiebt.
Kann mir bitte jemand helfen?
Danke!
Gruß
cleverm
ich habe folgenden Befehl der alle Dateien in einem bestimmten Verzeichnis mit bestimmten Textinhalt verschiebt und so auch funktioniert:
FOR /F %%i IN ('findstr /M "OK" c:\import\*2016*.txt') DO move /y %%i e:\import\OK
Ich benötige jedoch dies genau umgekehrt:
Alle Dateien die NICHT "OK" im Dateiinhalt enthalten in den Ordner "e:\temp\fehlerhaft" zu verschieben.
Das ganze sollte nach Möglichkeit auf Performance getrimmt sein, da die Batch täglich ca. 2GB und 10.000 Dateien übers Netzwerk verschiebt.
Kann mir bitte jemand helfen?
Danke!
Gruß
cleverm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 316933
Url: https://administrator.de/forum/alle-dateien-in-einem-verzeichnis-per-batch-verschieben-die-einen-bestimmten-textinhalt-nicht-beinhalten-316933.html
Ausgedruckt am: 20.04.2025 um 08:04 Uhr
11 Kommentare
Neuester Kommentar

@echo off
set "quelle=C:\import\*2016*.txt"
set "ziel=e:\temp\fehlerhaft"
powershell -Executionpolicy Bypass -Command "gci '%quelle%' | ?{(gc $_.FullName -ReadCount 1000) -notlike '*OK*'} | move-item -Destination '%ziel%' -Force"
Hallo cleverm,
teste mal folgendes:
Das Script verschiebt zuerst die Dateien, die den Suchbegriff enthalten und protokolliert dabei deren Pfade in einer temporären Logdatei. In einem zweiten Durchgang werden alle zuvor nicht verarbeiteten Dateien verschoben (diejenigen, deren Pfade nicht in der Logdatei stehen).
Grüße
Friemler
teste mal folgendes:
@echo off & setlocal
set "FilesToSearch=c:\import\*2016*.txt"
set "SearchPattern=OK"
set "GoodFilesDir=e:\import\OK"
set "BadFilesDir=e:\temp\fehlerhaft"
set "GoodFilesLog=%TEMP%\TheGoodFiles.txt"
> "%GoodFilesLog%" (
for /f "tokens=* delims=" %%f in ('findstr /m /c:"%SearchPattern%" "%FilesToSearch%" 2^>NUL') do (
echo %%f
move "%%f" "%GoodFilesDir%" 1>NUL 2>CON
))
for /f "tokens=* delims=" %%f in ('for %%f in ^("%FilesToSearch%"^) do @echo %%~f^|findstr /v /l /g:"%GoodFilesLog%" 2^>NUL') do (
move "%%f" "%BadFilesDir%" 1>NUL
)
del "%GoodFilesLog%" 2>NUL
Das Script verschiebt zuerst die Dateien, die den Suchbegriff enthalten und protokolliert dabei deren Pfade in einer temporären Logdatei. In einem zweiten Durchgang werden alle zuvor nicht verarbeiteten Dateien verschoben (diejenigen, deren Pfade nicht in der Logdatei stehen).
Grüße
Friemler
Moin cleverm,
das Verschieben der "GoodFiles" habe ich eingebaut, weil Dein Eröffnungsposting den Eindruck erweckte, als ob Du diesen Teilschritt benötigst und bereits umgesetzt hast. Aber anscheinend hast Du nur einen irgendwo kopierten Code-Schnipsel eingestellt.
Wenn die "GoodFiles" nicht verschoben werden sollen, ein Tipp: Es genügt, eine Zeile in meinem Script zu löschen, um das zu vermeiden. Welche Zeile das ist, solltest du in der Lage sein selbst herauszufinden.
Grüße
Friemler
das Verschieben der "GoodFiles" habe ich eingebaut, weil Dein Eröffnungsposting den Eindruck erweckte, als ob Du diesen Teilschritt benötigst und bereits umgesetzt hast. Aber anscheinend hast Du nur einen irgendwo kopierten Code-Schnipsel eingestellt.
Wenn die "GoodFiles" nicht verschoben werden sollen, ein Tipp: Es genügt, eine Zeile in meinem Script zu löschen, um das zu vermeiden. Welche Zeile das ist, solltest du in der Lage sein selbst herauszufinden.
Grüße
Friemler

Ups, Entschuldigung... Schreibfehler, ist oben abgeändert.

@echo off
set "quellen=C:\quelle1;C:\quelle2;C:\quelle3;C:\quelle4"
set "filter=*2016*.txt"
powershell -Executionpolicy Bypass -Command "'%quellen%'.split(';') | %%{$quelle=$_; gci $_ -Filter '%filter%' | ?{(gc $_.FullName -ReadCount 1000) -notlike '*OK*'} | move-item -Destination ($quelle + '\fehlerhaft') -Force}"

@echo off
set "quellen=C:\quelle1\A*\O;C:\quelle2;C:\quelle3;C:\quelle4"
set "filter=*2016*.txt"
powershell -Executionpolicy Bypass -Command "'%quellen%'.split(';') | %%{$quelle=$_; gci ($_ + '\%filter%') | ?{(gc $_.FullName -ReadCount 1000) -notlike '*OK*'} | move-item -Destination ($quelle + '\fehlerhaft') -Force}"
Und zwar bräuchte ich
Ich brauch jetzt auch was, nen Kasten Bier ...!!@cleverm Dein nicname ist schon gewagt was :-P