Per Batch Ordner nach Dateien anhand einer Liste durchsuchen und Ergebnisse in einer Textdatei ausgeben
Aloha,
nachdem sich in meinem Arbeitsprozess wohl 1-2 Fehler eingeschlichen haben, benötige ich eine Batch als Kontrolle:
Ich habe mittels einer anderen Batch, Dateien anhand einer Liste in einzelne Ordner verschoben. Nun möchte ich überprüfen ob das auch einwandfrei geklappt hat und was ich noch zu tun habe.
Die Liste ist wiefolgt aufgebaut:
Dateiname=Datum - Beschreibung
Beispiel: m&v!tglo.pdf=2012-06-25 - Beispiel_Projekt-Mustermann&Vogler
Die Datei "m&v!tglo.pdf" wurde also in den Ordner "2012-06-25 - Beispiel_Projekt-Mustermann&Vogler" verschoben.
Die Ordner befinden sich alle in einem Hauptverzeichnis, welches nun anhand der Liste durchsucht werden soll. Und zwar ob die richtigen Datein im richtigen Ordner sind. Was übereinstimmt soll in einer Liste ausgegeben werden, was nicht übereinstimmt bzw. Fehlerhaft einsortiert wurde in einer 2ten und was gänzlich fehlt in einer 3ten. Hierbei ist die Schwierigkeit, dass es sein kann, dass in diesem Hauptverzeichnis, einzelne Dateien liegen die zwar in der Liste vorkommen aber (noch) nicht im entsprechenden Ordner liegen. Diese sollen wenn möglich ignoriert werden. Zudem können noch weitere Ordner vorhanden sein, die mit dem Pozess ebenfalls nichts zu tun haben - auch diese sollen ignoriert werden. Im schlimmsten Fall sind Dateien die in der Liste vorhanden sind in Ordnern sie nicht in der Liste sind. Auch diese sollen ignoriert werden
Es sollen also quasi nur die Ordner durchsucht werden, welche auch in der Liste aufgeführt werden.
In den jeweiligen Ausgabe Listen soll nur jeweils die Beschreibung ohne Datum aufgeführt werden also: Beispiel_Projekt-Mustermann&Vogler. Die "Fehlt noch" Liste soll zusätzlich im "Original Format" unter anderm Namen abgespeichert werden also inkl: Dateiname=Datum - Beschreibung. Quasi als 4te Liste.
Es kann vorkommen, dass anhand der Liste mehrere Dateien einem Ordner zugewiesen sind. Wenn nun z.b. 5 Dateien dem Ordner zugewiesen sind aber nur 1 (oder 2,3,4) Vorhanden ist (sind) soll dieser Ordner trotzdem auf der Habenseite verbucht werden allerdings mit dem Zusatz was genau fehlt. Z.B.: Beispiel_Projekt-Mustermann&Vogler -> ES FEHLEN: m&v!tglo1.pdf, blabla2.xml
Die Liste mit den Fehlerhaften Eintägen soll den Beschreibungs Ordner auführen mit dem Zusatz was falsch einortiert wurde. Z.B. Beispiel_Projekt-Mustermann&Vogler -> FALSCH: lp-&tz.zip
Puh... ein ganz schöner Batzen, ich hoffe einer von euch steigt da irgendwie durch.
Hier nochmal die Kurzbeschreibung:
1) Ordner nach Dateien Anhand Liste durchsuchen
2) Übereinstimmung in Liste (nur Beschreibungs Ordner ohne Datum + evtl. Zusatz bei mehreren Dateien)
3) Fehlende in 2te Liste (nur Beschreibungs Ordner ohne Datum)
4) Fehlende ebenso als Ursprünglichen Aufbau speichern
4) Fehlerhaft in 4te Liste (nur Beschreibungs Ordner ohne Datum + was Falsch ist)
Viele Grüße
Robert
nachdem sich in meinem Arbeitsprozess wohl 1-2 Fehler eingeschlichen haben, benötige ich eine Batch als Kontrolle:
Ich habe mittels einer anderen Batch, Dateien anhand einer Liste in einzelne Ordner verschoben. Nun möchte ich überprüfen ob das auch einwandfrei geklappt hat und was ich noch zu tun habe.
Die Liste ist wiefolgt aufgebaut:
Dateiname=Datum - Beschreibung
Beispiel: m&v!tglo.pdf=2012-06-25 - Beispiel_Projekt-Mustermann&Vogler
Die Datei "m&v!tglo.pdf" wurde also in den Ordner "2012-06-25 - Beispiel_Projekt-Mustermann&Vogler" verschoben.
Die Ordner befinden sich alle in einem Hauptverzeichnis, welches nun anhand der Liste durchsucht werden soll. Und zwar ob die richtigen Datein im richtigen Ordner sind. Was übereinstimmt soll in einer Liste ausgegeben werden, was nicht übereinstimmt bzw. Fehlerhaft einsortiert wurde in einer 2ten und was gänzlich fehlt in einer 3ten. Hierbei ist die Schwierigkeit, dass es sein kann, dass in diesem Hauptverzeichnis, einzelne Dateien liegen die zwar in der Liste vorkommen aber (noch) nicht im entsprechenden Ordner liegen. Diese sollen wenn möglich ignoriert werden. Zudem können noch weitere Ordner vorhanden sein, die mit dem Pozess ebenfalls nichts zu tun haben - auch diese sollen ignoriert werden. Im schlimmsten Fall sind Dateien die in der Liste vorhanden sind in Ordnern sie nicht in der Liste sind. Auch diese sollen ignoriert werden
Es sollen also quasi nur die Ordner durchsucht werden, welche auch in der Liste aufgeführt werden.
In den jeweiligen Ausgabe Listen soll nur jeweils die Beschreibung ohne Datum aufgeführt werden also: Beispiel_Projekt-Mustermann&Vogler. Die "Fehlt noch" Liste soll zusätzlich im "Original Format" unter anderm Namen abgespeichert werden also inkl: Dateiname=Datum - Beschreibung. Quasi als 4te Liste.
Es kann vorkommen, dass anhand der Liste mehrere Dateien einem Ordner zugewiesen sind. Wenn nun z.b. 5 Dateien dem Ordner zugewiesen sind aber nur 1 (oder 2,3,4) Vorhanden ist (sind) soll dieser Ordner trotzdem auf der Habenseite verbucht werden allerdings mit dem Zusatz was genau fehlt. Z.B.: Beispiel_Projekt-Mustermann&Vogler -> ES FEHLEN: m&v!tglo1.pdf, blabla2.xml
Die Liste mit den Fehlerhaften Eintägen soll den Beschreibungs Ordner auführen mit dem Zusatz was falsch einortiert wurde. Z.B. Beispiel_Projekt-Mustermann&Vogler -> FALSCH: lp-&tz.zip
Puh... ein ganz schöner Batzen, ich hoffe einer von euch steigt da irgendwie durch.
Hier nochmal die Kurzbeschreibung:
1) Ordner nach Dateien Anhand Liste durchsuchen
2) Übereinstimmung in Liste (nur Beschreibungs Ordner ohne Datum + evtl. Zusatz bei mehreren Dateien)
3) Fehlende in 2te Liste (nur Beschreibungs Ordner ohne Datum)
4) Fehlende ebenso als Ursprünglichen Aufbau speichern
4) Fehlerhaft in 4te Liste (nur Beschreibungs Ordner ohne Datum + was Falsch ist)
Viele Grüße
Robert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 186972
Url: https://administrator.de/forum/per-batch-ordner-nach-dateien-anhand-einer-liste-durchsuchen-und-ergebnisse-in-einer-textdatei-ausgeben-186972.html
Ausgedruckt am: 10.01.2025 um 22:01 Uhr
7 Kommentare
Neuester Kommentar
Hallo Robert,
Mein ungetesteter Ansatz für deine ersten Punkte wäre diser:
Die zweiter for-Schleife liefert die beschreibung ohne Datum. Ich hoffe dass hilft dir schon mal, wenn ich später noch zeit finde sehe ich mir den rest mal an...
Gruß Malte.
Mein ungetesteter Ansatz für deine ersten Punkte wäre diser:
@echo off
set "checkliste=C:\test\test.bat"
set "checkfolder=C:\test"
cd %checkfolder%
for /f "tokens=1,2 delims==" %%a in (%checkliste%) do (call :prozess "%%a" "%%b")
goto :eof
:prozess
set "file=%~1"
set "folder=%~2"
for /f "tokens=2 delims=-" %%c in ("%folder%") do set beschreibung=%%c
cd %folder%
if exist %file% (echo %beschreibung%>>istdrin.txt) else (echo %beschreibung%>>istNICHTdrin.txt)
cd..
goto :eof
Die zweiter for-Schleife liefert die beschreibung ohne Datum. Ich hoffe dass hilft dir schon mal, wenn ich später noch zeit finde sehe ich mir den rest mal an...
Gruß Malte.
moin Robert,
ungetestet!! würde ich das ganze so machen:
Gruß Phil
ungetestet!! würde ich das ganze so machen:
@echo off
setlocal
set "Ordner=D:\
set "EingabeListe=D:\DatenVerschieben.txt"
set "InOrdnungListe=D:\Das wurde richtig sortiert.txt"
set "NichtVorhanden=D:\Fehlt noch Liste.txt"
set "NichtVorhandenOF=D:\Noch mal zu erledigen Liste.txt"
set "NichtVorhandenBF=D:\Das ist Falsch geworden Liste.txt"
set T="%temp%\Listetmp"
rem Falls ... Listen Leeren
::for %%i in ("%InOrdnungListe%" "%NichtVorhanden%" "%NichtVorhandenOF%" "%NichtVorhandenBF%" ) do type nul >"%%~i"
rem EingabeListe sortieren und Umschreiben (Pfad?Dateiname?Beschreibung)
( @for /f "usebackqtokens=1-4*delims==- " %%i in ("%EingabeListe%") do @echo %%j-%%k-%%l - %%m?%%i?%%m
) |sort >%T%
(
for /f "usebackqtokens=1-3delims=?" %%i in (%T%) do (
if exist "%%i\%%j" >&3 echo %%j
if not exist "%%i\%%j" for /r "%Ordner%" %%a in ("%%j") do (
>&4 echo %%k
>&5 echo %%j=%%i
if "%%~dpa" equ "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%j -- Noch nicht Verschoben...
if "%%~dpa" equ "%Ordner%" >&6 echo %%k -- Noch nicht Verschoben... %%j
if "%%~dpa" neq "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%j -- im Falschen Ordner: %%a
if "%%~dpa" neq "%Ordner%" >&6 echo %%k -- %%j im Falschen Ordner: %%a
) )
) 3>>"%InOrdnungListe%" 4>>"%NichtVorhanden%" 5>>"%NichtVorhandenOF" 6>>"%NichtVorhandenBF%"
Gruß Phil
hallo Robert,
deswegen ist der ja ungetestet (immer mit eingebauten Fehlerchen zum Lernen und Nachvollziehen ... .
Aber in einer Endlosschleife lief der Batch nicht.
hier ist die gehybschte Version davon:
Gruß Phil
deswegen ist der ja ungetestet (immer mit eingebauten Fehlerchen zum Lernen und Nachvollziehen ... .
Aber in einer Endlosschleife lief der Batch nicht.
hier ist die gehybschte Version davon:
@echo off
setlocal
mode 220
rem Ordner mit anschliesenden Backslash angeben
set "Ordner=J:\Neuer\"
set "EingabeListe=J:\Neuer\DatenVerschieben.txt"
set "InOrdnungListe=J:\Neuer\Das wurde richtig sortiert.txt"
set "NichtVorhanden=J:\Neuer\Fehlt noch Liste.txt"
set "NichtVorhandenOF=J:\Neuer\Noch mal zu erledigen Liste.txt"
set "NichtVorhandenBF=J:\Neuer\Das ist Falsch geworden Liste.txt"
set T="%temp%\Listetmp"
rem Falls ... Listen Leeren
for %%i in ("%InOrdnungListe%" "%NichtVorhanden%" "%NichtVorhandenOF%" "%NichtVorhandenBF%" ) do type nul >"%%~i"
rem EingabeListe sortieren und Umschreiben ( Beschreibung?Pfad?Dateiname? )
( @for /f "usebackqtokens=1-4*delims==- " %%i in ("%EingabeListe%") do @echo %%m?%%j-%%k-%%l - %%m?%%i?
) |sort >%T%
(
for /f "usebackqtokens=1-3delims=?" %%i in (%T%) do (
echo Ueberpruefe: %%i^> %%j\%%k
set "NoFile="
if exist "%Ordner%%%j\%%k" set "NoFile=1" & >&3 echo %%i -- %%j\%%k
if not exist "%Ordner%%%j\%%k" for /r "%Ordner%" %%a in ("%%k?") do (
set "NoFile=1"
>&4 echo %%i -- %%j\%%k
>&5 echo %%k=%%j
if "%%~dpa" equ "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%i -- Noch nicht Verschoben: %%j\%%k
if "%%~dpa" equ "%Ordner%" >&6 echo %%i -- Noch nicht Verschoben: %%j\%%k
if "%%~dpa" neq "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k
if "%%~dpa" neq "%Ordner%" >&6 echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k
)
if not defined NoFile >&5 echo %%k=%%j& >&6 echo %%i -- Hinweis Datei nicht Vorhanden: %%k
)
) 3>>"%InOrdnungListe%" 4>>"%NichtVorhanden%" 5>>"%NichtVorhandenOF%" 6>>"%NichtVorhandenBF%"
ping localhost -n 10 1>nul
Gruß Phil
mit Trennung "=" für Dateiname und Trennung " - " für die Beschreibung
und die Änderungen also in etwa so:
PS. Das ist doch kein Monstrum
Gruß Phil
und die Änderungen also in etwa so:
@echo off
setlocal
mode 220
set "Ordner=J:\Neuer\"
set "EingabeListe=J:\Neuer\DatenVerschieben.txt"
set "InOrdnungListe=J:\Neuer\Das wurde richtig sortiert.txt"
set "NichtVorhanden=J:\Neuer\Fehlt noch Liste.txt"
set "NichtVorhandenOF=J:\Neuer\Noch mal zu erledigen Liste.txt"
set "NichtVorhandenBF=J:\Neuer\Das ist Falsch geworden Liste.txt"
set T="%temp%\Listetmp"
rem Falls ... Listen Leeren
for %%i in ("%InOrdnungListe%" "%NichtVorhanden%" "%NichtVorhandenOF%" "%NichtVorhandenBF%" ) do type nul >"%%~i"
rem EingabeListe sortieren und Umschreiben ( Beschreibung?Pfad?Dateiname? )
( @for /f "usebackqtokens=1*delims==" %%i in ("%EingabeListe%") do @(
for /f "tokens=1-3* delims=- " %%j in ("%%j") do @echo %%m?%%j-%%k-%%l - %%m?%%i?
)) |sort >%T%
(
for /f "usebackqtokens=1-3delims=?" %%i in (%T%) do (
rem Meldung im Fenster ausgeben
echo Ueberpruefe: %%i^> %%j\%%k
set "NoFile="
rem Meldung nach Handle 3 umbiegen
if exist "%Ordner%%%j\%%k" set "NoFile=1" & >&3 echo %%i -- %%j\%%k
if not exist "%Ordner%%%j\%%k" for /r "%Ordner%" %%a in ("%%k?") do (
set "NoFile=1"
if "%%~dpa" equ "%Ordner%" findstr /c:"- %%j\\" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%i -- Noch nicht Verschoben: %%j\%%k
rem Meldung nach Handle 6 umbiegen
if "%%~dpa" equ "%Ordner%" >&6 echo %%i -- Noch nicht Verschoben: %%j\%%k
if "%%~dpa" neq "%Ordner%" findstr /c:"- %%j\\" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k
if "%%~dpa" neq "%Ordner%" >&6 echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k
)
rem Meldung nach Handle 5 und naechste nach Handle 4 umbiegen
if not defined NoFile >&5 echo %%k=%%j& >&4 echo %%i -- Hinweis Datei nicht Vorhanden: %%k
)
rem Die Meldungen der Umgebogenen Handles 3 - 6 an die Dateien anhängen
) 3>>"%InOrdnungListe%" 4>>"%NichtVorhanden%" 5>>"%NichtVorhandenOF%" 6>>"%NichtVorhandenBF%"
pause
PS. Das ist doch kein Monstrum
Gruß Phil