For-Schleife Bedingung "nicht erfüllt" abfragen
Hallo zusammen,
dieses Forum hat mir schon des öteren weiter geholfen.
Leider finde ich auch nach intensiver Suche noch nicht das richte für mein Problem.
Ich habe eine kleine Batch:
@echo off &setlocal
set "sourceRoot=Z:\PDF\"
set "sourceList=src.txt"
set "destFolder=Z:\PDF\Neuer Ordner"
for /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') do (
copy "%%~i" "%destFolder%\"
)
Diese funktioniert wie sie soll. Anhand einer Liste "src.txt" werden alle verfügbaren PDF-Dateien in den neuen Ordner kopiert.
Jetzt kann es aber sein das in der Liste .pdf Namen auftauchen, die nicht im Ordner sind.
Gibt es eine Möglichkeit diese direkt auszugeben?
Zur For-Schleife gibt es meines Wissens nur den DO-Befehl (Bedingung erfüllt).
Falls es jetzt ein "DO NOT-Befehl ( Bedingung nicht erfüllt) geben würde, könnte ich recht einfach den nicht existieren Dateinamen ausgeben.
Vielen Dank an alle, die sich Zeit für mein Problem nehmen.
dieses Forum hat mir schon des öteren weiter geholfen.
Leider finde ich auch nach intensiver Suche noch nicht das richte für mein Problem.
Ich habe eine kleine Batch:
@echo off &setlocal
set "sourceRoot=Z:\PDF\"
set "sourceList=src.txt"
set "destFolder=Z:\PDF\Neuer Ordner"
for /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') do (
copy "%%~i" "%destFolder%\"
)
Diese funktioniert wie sie soll. Anhand einer Liste "src.txt" werden alle verfügbaren PDF-Dateien in den neuen Ordner kopiert.
Jetzt kann es aber sein das in der Liste .pdf Namen auftauchen, die nicht im Ordner sind.
Gibt es eine Möglichkeit diese direkt auszugeben?
Zur For-Schleife gibt es meines Wissens nur den DO-Befehl (Bedingung erfüllt).
Falls es jetzt ein "DO NOT-Befehl ( Bedingung nicht erfüllt) geben würde, könnte ich recht einfach den nicht existieren Dateinamen ausgeben.
Vielen Dank an alle, die sich Zeit für mein Problem nehmen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 343298
Url: https://administrator.de/forum/for-schleife-bedingung-nicht-erfuellt-abfragen-343298.html
Ausgedruckt am: 04.04.2025 um 02:04 Uhr
8 Kommentare
Neuester Kommentar

Schau dir mal die Optionen von findstr an, dort findest du den Switch /V der das macht was du brauchst...
Gruß
>"notfound.txt" (dir /a-d /b /s "%sourceRoot%\*.pdf" | findstr /ivg:"%sourceList%")
Guten Morgen.
Mittels IF-Bedingung kann dies im Anweisungsblock des DO geschehen.
..oder so *fG*
~Arano
Mittels IF-Bedingung kann dies im Anweisungsblock des DO geschehen.
for /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') do (
IF EXIST "%%~i" (
REM COPY "%%~i" "%destFolder%\"
ECHO "Okay"
) ELSE (
ECHO "Nicht gefunden: %%~i"
)
)
~Arano
Hallo BatchNeuling,
mit dem Code von @133417 findest Du leider nur die Dateien, die zwar auf der Platte vorhanden sind, in der Textdatei jedoch nicht vorkommen.
In Deinem Eröffnungsposting schreibst Du jedoch
Du möchtest also die Dateien, deren Namen zwar in der Textdatei vorkommen, auf der Platte jedoch nicht vorhanden sind.
Teste dazu mal folgendes:
Gruß
Friemler
mit dem Code von @133417 findest Du leider nur die Dateien, die zwar auf der Platte vorhanden sind, in der Textdatei jedoch nicht vorkommen.
In Deinem Eröffnungsposting schreibst Du jedoch
Jetzt kann es aber sein das in der Liste .pdf Namen auftauchen, die nicht im Ordner sind.
Gibt es eine Möglichkeit diese direkt auszugeben?
Gibt es eine Möglichkeit diese direkt auszugeben?
Du möchtest also die Dateien, deren Namen zwar in der Textdatei vorkommen, auf der Platte jedoch nicht vorhanden sind.
Teste dazu mal folgendes:
@echo off &setlocal
set "SrcFolder=Z:\PDF"
set "DstFolder=Z:\PDF\Neuer Ordner"
set "FileMask=*.pdf"
set "FileList=src.txt"
set "ProtocolFile=copy.log"
1>"%ProtocolFile%" 2>NUL (
for /f "delims=" %%a in ('dir /s /b /a:-d "%SrcFolder%\%FileMask%" ^| findstr /il /g:"%FileList%"') do (
echo %%~nxa
copy "%%~a" "%DstFolder%" > NUL
)
)
findstr /vil /g:"%ProtocolFile%" "%FileList%"
del "%ProtocolFile%"
Gruß
Friemler
Hallo BatchNeuling,
Ob das Script funktioniert hängt letztendlich davon ab, was in der
Am besten Du zeigst uns mal einen Auszug aus der
Grüße
Friemler
FINDSTR
gibt die Zeilen der Eingabedatei/der über eine Pipe eingelesenen Eingabe aus, in denen es den/die Suchbegriff(e) findet, einECHO
ist daher nicht notwendig.- Die von dir skizzierte Umleitung der Ausgabe in eine Datei würde funktionieren.
Ob das Script funktioniert hängt letztendlich davon ab, was in der
SRC.txt
steht (komplette Pfade oder nur Dateinamen) und ob das Root-Verzeichnis Unterverzeichnisse enthält (in dem Fall enthält die Ausgabe von DIR
komplette Pfade, ansonsten nur Dateinamen). Falls die Dateinamen oder deren Pfade z.B. deutsche Sonderzeichen enthalten (äöüßÄÖÜ) spielt auch noch die Zeichencodierung der SRC.txt
eine Rolle (OEM 850 wäre bei einem deutschen Windows richtig).Am besten Du zeigst uns mal einen Auszug aus der
SRC.txt
und klärst die oben angesprochenen Fragen.Grüße
Friemler