Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batch Ordner nach Dateien anhand einer Liste durchsuchen und Ergebnisse in einer Textdatei ausgeben

Frage Entwicklung Batch & Shell

Mitglied: romberto

romberto (Level 1) - Jetzt verbinden

25.06.2012, aktualisiert 10:28 Uhr, 4003 Aufrufe, 7 Kommentare

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



Mitglied: Turrex0100
25.06.2012, aktualisiert um 14:51 Uhr
Hallo Robert,

Mein ungetesteter Ansatz für deine ersten Punkte wäre diser:

01.
@echo off 
02.
set "checkliste=C:\test\test.bat" 
03.
set "checkfolder=C:\test" 
04.
cd %checkfolder% 
05.
for /f "tokens=1,2 delims==" %%a in (%checkliste%) do (call :prozess "%%a" "%%b") 
06.
goto :eof 
07.
 
08.
:prozess 
09.
set "file=%~1" 
10.
set "folder=%~2" 
11.
for /f "tokens=2 delims=-" %%c in ("%folder%") do set beschreibung=%%c  
12.
cd %folder% 
13.
if exist %file% (echo %beschreibung%>>istdrin.txt) else (echo %beschreibung%>>istNICHTdrin.txt) 
14.
cd.. 
15.
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.
Bitte warten ..
Mitglied: pieh-ejdsch
25.06.2012, aktualisiert um 16:09 Uhr
moin Robert,

ungetestet!! würde ich das ganze so machen:
01.
@echo off 
02.
setlocal 
03.
 
04.
set           "Ordner=D:\ 
05.
set     "EingabeListe=D:\DatenVerschieben.txt" 
06.
set   "InOrdnungListe=D:\Das wurde richtig sortiert.txt" 
07.
set   "NichtVorhanden=D:\Fehlt noch Liste.txt" 
08.
set "NichtVorhandenOF=D:\Noch mal zu erledigen Liste.txt" 
09.
set "NichtVorhandenBF=D:\Das ist Falsch geworden Liste.txt" 
10.
 
11.
set T="%temp%\Listetmp" 
12.
 
13.
 rem Falls ... Listen Leeren 
14.
::for %%i in ("%InOrdnungListe%" "%NichtVorhanden%" "%NichtVorhandenOF%" "%NichtVorhandenBF%" ) do type nul >"%%~i" 
15.
 
16.
 rem EingabeListe sortieren und Umschreiben (Pfad?Dateiname?Beschreibung) 
17.
( @for /f "usebackqtokens=1-4*delims==- " %%i in ("%EingabeListe%") do @echo %%j-%%k-%%l - %%m?%%i?%%m 
18.
) |sort  >%T% 
19.
 
20.
21.
for /f "usebackqtokens=1-3delims=?" %%i in (%T%) do ( 
22.
  if exist "%%i\%%j" >&3 echo %%j 
23.
  if not exist "%%i\%%j" for /r "%Ordner%" %%a in ("%%j") do ( 
24.
    >&4 echo %%k 
25.
    >&5 echo %%j=%%i 
26.
    if "%%~dpa" equ "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%j  -- Noch nicht Verschoben... 
27.
    if "%%~dpa" equ "%Ordner%" >&6 echo %%k -- Noch nicht Verschoben... %%j 
28.
    if "%%~dpa" neq "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%j  -- im Falschen Ordner: %%a 
29.
    if "%%~dpa" neq "%Ordner%" >&6 echo %%k -- %%j im Falschen Ordner: %%a 
30.
) ) 
31.
) 3>>"%InOrdnungListe%" 4>>"%NichtVorhanden%" 5>>"%NichtVorhandenOF" 6>>"%NichtVorhandenBF%"

Gruß Phil
Bitte warten ..
Mitglied: romberto
25.06.2012, aktualisiert um 16:44 Uhr
Hallo Malte, Hallo Phil,

Vielen Dank schonmal an euch beide! Leider scheint keine der beiden Lösungsvorschläge zu funktionieren.

@Malte: Hier bekam ich erstmal nur 2 Zahlen in die Listen geschrieben... Zeile 11 habe ich dann wie folgt geändert:

01.
for /f "tokens=3 delims= " %%c in ("%folder%") do set beschreibung=%%c
(es sind auch diverse "-" in den Dateinamen vorhanden)

Danach hat er mir ausschließlich den istNICHTdrin.txt text ausgegeben und das auch unvollständig.

@phil: Deine Batch schein in einer Endlosschleife zu laufen. Ich habe nach 5 Minuten abgebrochen -> "InOrdnungListe" war leer und in "NichtVorhanden" wurde jeder Eintrag 250 mal geschrieben...
Bitte warten ..
Mitglied: pieh-ejdsch
25.06.2012, aktualisiert um 20:01 Uhr
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:
01.
@echo off 
02.
setlocal 
03.
mode 220 
04.
 
05.
 rem Ordner mit anschliesenden Backslash angeben 
06.
set           "Ordner=J:\Neuer\" 
07.
set     "EingabeListe=J:\Neuer\DatenVerschieben.txt" 
08.
set   "InOrdnungListe=J:\Neuer\Das wurde richtig sortiert.txt" 
09.
set   "NichtVorhanden=J:\Neuer\Fehlt noch Liste.txt" 
10.
set "NichtVorhandenOF=J:\Neuer\Noch mal zu erledigen Liste.txt" 
11.
set "NichtVorhandenBF=J:\Neuer\Das ist Falsch geworden Liste.txt" 
12.
 
13.
set T="%temp%\Listetmp" 
14.
 
15.
 rem Falls ... Listen Leeren 
16.
for %%i in ("%InOrdnungListe%" "%NichtVorhanden%" "%NichtVorhandenOF%" "%NichtVorhandenBF%" ) do type nul >"%%~i" 
17.
 
18.
 rem EingabeListe sortieren und Umschreiben  ( Beschreibung?Pfad?Dateiname? ) 
19.
( @for /f "usebackqtokens=1-4*delims==- " %%i in ("%EingabeListe%") do @echo %%m?%%j-%%k-%%l - %%m?%%i? 
20.
) |sort  >%T% 
21.
 
22.
23.
for /f "usebackqtokens=1-3delims=?" %%i in (%T%) do ( 
24.
  echo Ueberpruefe: %%i^> %%j\%%k 
25.
  set "NoFile=" 
26.
  if exist "%Ordner%%%j\%%k" set "NoFile=1" & >&3 echo %%i -- %%j\%%k 
27.
  if not exist "%Ordner%%%j\%%k" for /r "%Ordner%" %%a in ("%%k?") do ( 
28.
    set "NoFile=1" 
29.
    >&4 echo %%i -- %%j\%%k 
30.
    >&5 echo %%k=%%j 
31.
    if "%%~dpa" equ "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%i -- Noch nicht Verschoben: %%j\%%k 
32.
    if "%%~dpa" equ "%Ordner%" >&6 echo %%i -- Noch nicht Verschoben: %%j\%%k 
33.
    if "%%~dpa" neq "%Ordner%" findstr /x "%%j" "%InOrdnungListe%" 1>nul 2>nul && >&3  echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k 
34.
    if "%%~dpa" neq "%Ordner%" >&6 echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k 
35.
36.
  if not defined NoFile >&5 echo %%k=%%j& >&6 echo %%i -- Hinweis Datei nicht Vorhanden: %%k  
37.
38.
) 3>>"%InOrdnungListe%" 4>>"%NichtVorhanden%" 5>>"%NichtVorhandenOF%" 6>>"%NichtVorhandenBF%" 
39.
 
40.
ping localhost -n 10 1>nul
Gruß Phil
Bitte warten ..
Mitglied: romberto
25.06.2012 um 20:21 Uhr
Hallo Phil,

Vielen Dank! Jetzt werden alle Dateien erstellt -> ABER: Es gibt noch ein Paar Problemchen:

1) 1 Kleiner Verwechslungsfehler hat sich eingeschlichen, bei dem ich mich aber auch evtl. falsch ausgedrückt habe -> in "NichtVorhanden" und "NichtVorhandenOF" sollen ausschließlich die Einträge rein die momentan in "NichtVorhandenBF" mit dem Hinweis Datei nicht Vorhanden: ausgegeben werden (also die Dateien die nicht gefunden wurden)

"im Falschen Ordner:" "Noch nicht Verschoben:" (also die Fehler) sollen dafür in "NichtVorhandenBF" ausgegeben werden.

2)Dateien mit einem "-" im Namen werden nicht erkannt (beispiel m&v-1234.pdf) bzw. verursachen Fehler.

Dies wird mir mir dem Zusatz "Hinweis Datei nicht Vorhanden: m&v"

ausgegeben.

3) Einige Verzeichnisse werden nicht richtig getrennt, gerade wenn ein "-" im dateinamen ist:

m&v-1234.pdf=2012-06-25 - Beispiel-Mustermann&Vogel

wird zu -> 25 - Beispiel-Mustermann&Vogel -- Hinweis Datei nicht Vorhanden: m&v

Ich denke dafür sind nur minimale abänderungen nötig, denn vom Prinzip her geht das Teil ja 1A...
Ich kenne mich leider erst sehr wenig mit Batch Programmierungen aus um hier die Fehler zu Orten - Bin dir aber wirklich sehr Dankbar, dass du dieses Monstrum geschrieben hast ;)

Viele Grüße

Robert
Bitte warten ..
Mitglied: pieh-ejdsch
25.06.2012 um 20:54 Uhr
mit Trennung "=" für Dateiname und Trennung " - " für die Beschreibung
und die Änderungen also in etwa so:
01.
@echo off 
02.
setlocal 
03.
mode 220 
04.
 
05.
set           "Ordner=J:\Neuer\" 
06.
set     "EingabeListe=J:\Neuer\DatenVerschieben.txt" 
07.
set   "InOrdnungListe=J:\Neuer\Das wurde richtig sortiert.txt" 
08.
set   "NichtVorhanden=J:\Neuer\Fehlt noch Liste.txt" 
09.
set "NichtVorhandenOF=J:\Neuer\Noch mal zu erledigen Liste.txt" 
10.
set "NichtVorhandenBF=J:\Neuer\Das ist Falsch geworden Liste.txt" 
11.
 
12.
set T="%temp%\Listetmp" 
13.
 
14.
 rem Falls ... Listen Leeren 
15.
for %%i in ("%InOrdnungListe%" "%NichtVorhanden%" "%NichtVorhandenOF%" "%NichtVorhandenBF%" ) do type nul >"%%~i" 
16.
 
17.
 rem EingabeListe sortieren und Umschreiben  ( Beschreibung?Pfad?Dateiname? ) 
18.
( @for /f "usebackqtokens=1*delims==" %%i in ("%EingabeListe%") do @( 
19.
  for /f "tokens=1-3* delims=- " %%j in ("%%j") do @echo %%m?%%j-%%k-%%l - %%m?%%i? 
20.
)) |sort  >%T% 
21.
 
22.
23.
for /f "usebackqtokens=1-3delims=?" %%i in (%T%) do ( 
24.
   rem Meldung im Fenster ausgeben 
25.
  echo Ueberpruefe: %%i^> %%j\%%k 
26.
  set "NoFile=" 
27.
   rem Meldung nach Handle 3 umbiegen  
28.
  if exist "%Ordner%%%j\%%k" set "NoFile=1" & >&3 echo %%i -- %%j\%%k 
29.
  if not exist "%Ordner%%%j\%%k" for /r "%Ordner%" %%a in ("%%k?") do ( 
30.
    set "NoFile=1" 
31.
    if "%%~dpa" equ "%Ordner%" findstr /c:"- %%j\\" "%InOrdnungListe%" 1>nul 2>nul && >&3 echo %%i -- Noch nicht Verschoben: %%j\%%k 
32.
     rem Meldung nach Handle 6 umbiegen 
33.
    if "%%~dpa" equ "%Ordner%" >&6 echo %%i -- Noch nicht Verschoben: %%j\%%k 
34.
    if "%%~dpa" neq "%Ordner%" findstr /c:"- %%j\\" "%InOrdnungListe%" 1>nul 2>nul && >&3  echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k 
35.
    if "%%~dpa" neq "%Ordner%" >&6 echo %%i -- im Falschen Ordner: %%a -- muss nach: %%j\%%k 
36.
37.
   rem Meldung nach Handle 5 und naechste nach Handle 4 umbiegen 
38.
  if not defined NoFile >&5 echo %%k=%%j& >&4 echo %%i -- Hinweis Datei nicht Vorhanden: %%k  
39.
40.
 rem Die Meldungen der Umgebogenen Handles 3 - 6 an die Dateien anhängen 
41.
) 3>>"%InOrdnungListe%" 4>>"%NichtVorhanden%" 5>>"%NichtVorhandenOF%" 6>>"%NichtVorhandenBF%" 
42.
 
43.
pause
PS. Das ist doch kein Monstrum
Gruß Phil
Bitte warten ..
Mitglied: romberto
25.06.2012 um 21:34 Uhr
Hallo Phil,

für jemanden der sonst nur mit maximal 8 Zeilen arbeitet ist das schon ne Hausnummer.

Vielen, vielen Dank! Habe gerade alle Eventualitäten getestet die mir eingefallen sind und alles hat einwandfrei funktioniert. Und das sogor um einiges besser als ich es mir überlegt hatte.

Nochmals Danke und noch einen schönen Abend.

Viele Grüße

Robert
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

VB for Applications
Dateien nach "Text" durchsuchen und Pfad ausgeben (32)

Frage von chgs2011 zum Thema VB for Applications ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...