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

Dateien aus einer Abfrage ausschließen

Frage Entwicklung Batch & Shell

Mitglied: ghostX

ghostX (Level 1) - Jetzt verbinden

15.07.2010, aktualisiert 15:33 Uhr, 4298 Aufrufe, 12 Kommentare

Hallo Gemeinde,

habe eine Frage ...(was sonst?) )

Habe eine Batch Datei die in einem Verzeichnis alle Dateien nach dem aktuellen Datum überprüft und eine Meldung ausgibt falls eine Datei kein aktuelles Datum hat. Möchte aber einige Dateien aus der Abfrage ausschließen. Wie muss ich mein Script umbauen um das zu lösen?

Mein jetziger Script:

01.
@echo off & setlocal  
02.
set Dateien=  "C:\Dateien\*" 
03.
 
04.
set "Vergleich=%date%" 
05.
set "Log=C:\Test.log" 
06.
 
07.
if exist "%Log%" del "%Log%" 
08.
 
09.
echo>>"%Log%" %date% 
10.
 
11.
for %%i in (%Dateien%) do if exist %%i (  
12.
	echo %%~ti|findstr /b "%Vergleich%">nul || echo >>"%Log%" Datei nicht aktuell: %%i  
13.
)  
14.
 
15.
if exist "%Log%" notepad "%Log%"
Mitglied: Biber
15.07.2010 um 15:40 Uhr
Moin GhostX,

ich hab deinem Schnipsel mal codeformatierung spendiert.

Am einfachsten wäre es, wenn du die auszuschliessenden Dateinamen in einer Liste (=Textdatei) zeilenweise sammelst.
Dann kannst du ergänzen:
01.
@echo off & setlocal  
02.
set Dateien=  "C:\Dateien\*" 
03.
 
04.
set "Vergleich=%date%" 
05.
set "Log=C:\Test.log" 
06.
 
07.
if exist "%Log%" del "%Log%" 
08.
 
09.
echo>>"%Log%" %date% 
10.
 
11.
for %%i in (%Dateien%) do Findstr /i /C:"%%i" X:\YZ\DontCare.txt>nul ||if exist %%i (  
12.
	echo %%~ti|findstr /b "%Vergleich%">nul || echo >>"%Log%" Datei nicht aktuell: %%i  
13.
)  
14.
 
15.
if exist "%Log%" notepad "%Log%"
Mit diesem ergänten Fragment Findstr /i /C:"%%i" X:\YZ\DontCare.txt>nul || suchst du "genau"(="/C:"), aber ohne Berücksichtigung Klein/Grossschreibung ("/i") in einer Datei "X:\XZ\dontcare.txt" nach den Dateinamen.

Falls der Ausschluss sich aler auf Wildcards bezieht (alle "*.sik" oder alle "final*.*"-Dateien, dann wäre ein anderes Vorgehen sinnvoll.

Grüße
Biber
Bitte warten ..
Mitglied: 60730
15.07.2010 um 15:44 Uhr
moin,

so wie das script aufgebaut ist - fehlt doch nur innerhalb der Schleife (vor zeile 12) if not "%%i"=="aberdunicht.txt" if not "%%i"=="undDUschonGarnicht.exe"

Oder wenn es mehrere wären, eine weitere Schleife die auch wieder ein if x not y macht.

Gruß

edit
ich hab deinem Schnipsel mal codeformatierung spendiert.

Sie schon wieder und ich hab mich schon "gefreut", dass der OT das selber kann....

Via Findstr - anstatt ner zweiten Schleife ist ein schöner Biber /edit
Bitte warten ..
Mitglied: ghostX
16.07.2010 um 10:15 Uhr
Hi,

danke für eure Antworten.

Will aber noch nicht funktionieren. Es schließt die Dateien in der Textdatei nicht aus. Muss ich nicht anstatt

Findstr /i /C:"%%i" X:\YZ\DontCare.txt>nul ||


Findstr /i /%Dateien% "%%i" X:\YZ\DontCare.txt>nul ||

schreiben?

Möchte ja nicht in C: suchen sondern in den Verzeichnissen die ich unter "Dateien" angegeben habe

Es sind mehrere Dateien in der Textdatei die ausgeschlossen werden sollen (ca 20), deshalb wird es etwas zu lang mit Timo seiner Lösung

/Edit: Ok sorry muss mich korrigieren, es funktioniert, aber leider löst das nicht mein Problem. Hatte einen Denkfehler.

Brauche eigentlich nur ein Script der in einem Verzeichnis zwischen mehreren Dateien überprüft ob eine Datei mit dem heutigen Datum vorhanden ist. (Es langt wenn nur eine Datei das aktuelle Datum hat, also es ist egal wenn andere ältere Dateien vorhanden sind) Wenn nicht dann soll er mir nur sagen dass es nicht aktuell ist.

Sorry wegen den dummen Fragen, bin wirklich noch ein Anfänger in dem Gebiet.

Etwas Hintergrundinfo: Es wird täglich ein Backup erstellt das jeden Tag einen anderen Dateinamen bekommt, die alten Backupdateien werden nicht überschrieben und bleiben im selben Verzeichnis. deshalb kann ich in meiner Abfrage nicht nach Dateinamen oder Dateiendung gehen sondern muss nach Datum gehen.
Bitte warten ..
Mitglied: Biber
16.07.2010 um 13:24 Uhr
Moin ghostX,

es mag an der langen und heißen Woche voller Montage liegen, aber....

Zitat von ghostX:
Brauche eigentlich nur ..[... ]. (Es langt wenn nur eine Datei das aktuelle Datum hat,
also es ist egal wenn andere ältere Dateien vorhanden sind)
Wenn nicht dann soll er mir nur sagen dass es nicht aktuell ist.

Noch mal mit meinen Worten - neue Aufgabenstellung ist jetzt
  • ein bestimmtes Verzeichnis abgrasen
  • und daraufhin prüfen, ob mindestens eine Datei mit heutigem Datum vorhanden ist?
  • und wenn keine Datei von heute vorhanden ist, dann...???

Versteh ich nicht ganz.
-> Entweder dein Backupkrams läuft zeitgesteuert.
Jeden Tach meinetwegen.
Dann kann es entweder a) klappen oder b) nicht klappen.
Wenn es NICHT klappt--> dann sollte dein "Wenn nicht dann soll er mir nur sagen dass es nicht aktuell ist." starten.

-> Oder dein Backupkrams läuft zufällig.... wenn du mal dran denkst, auf "meinBackup" doppelzuklicken.
-> Dann hast du aber ohnehin keine Datei "von heute" gewährleistet.

Also... ???

Lass mal Details wie "FOR/F" oder "IF EXIST" weg und erklär mir bitte nochmal den Prozess.

Grüße
Biber
Bitte warten ..
Mitglied: ghostX
16.07.2010 um 13:39 Uhr
Hi Biber,

Sorry wollte dich nicht verwirren. Den ersten Code den ich gepostet hab brauchst du ja eigentlich nicht mehr zu beachten. Es ist ja was anderes was ich nun brauche. Hätte ich vllt ein neues Thema eröffnen sollen....


Zitat von Biber:
Noch mal mit meinen Worten - neue Aufgabenstellung ist jetzt
  • ein bestimmtes Verzeichnis abgrasen <-- JA
  • und daraufhin prüfen, ob mindestens eine Datei mit heutigem Datum vorhanden ist? <-- JA
  • und wenn keine Datei von heute vorhanden ist, dann...??? <-- Dann gebe in der Logdatei aus dass der Backup nicht aktuell ist
...
-> Entweder dein Backupkrams läuft zeitgesteuert. <-- JA zeitgesteuert, jede nacht
Jeden Tach meinetwegen.
Dann kann es entweder a) klappen oder b) nicht klappen. <-- JA
Wenn es NICHT klappt--> dann sollte dein "Wenn nicht dann soll er mir nur sagen dass es nicht aktuell ist." starten. <-- JA


Also zusammengefasst: Überprüfe in einem Verzeichnis X ob eine beliebige Datei mit aktuellem Datum vorhanden ist, wenn nein, schreibe mir in die Logdatei "Backup nicht aktuell"
Bitte warten ..
Mitglied: Biber
16.07.2010 um 14:01 Uhr
Ja nee, ghostX,

nicht dass ich mich drücken wollte vor dem Schreiben der geforderten Halbzeile, aber...

Ist Bullshit suboptimal aus meiner Sicht.
Egal wieviel Zeilen der Oneliner haber wird... es ist für dich ein zusätzlicher manueller (und damit fehlerträchtiger) Schritt.
Du musst eben diese Datei starten, sonst hast du die Info nicht.
Doppelklick zum Starten, eine beliebige Taste zum Meldung wegdrücken - sind zwei Schritte, die dich auf 200 Jahre hochgerechnet fast eine volle Arbeitswoche kosten - for nothing.

Wenn denn dein Backupkram jede Nacht vor sich hin dölmert, dann lass es doch
a) wenn das Backup klappt
- am Ende eine Datei mit dem klangvollen Namen "Aktuelles Backup vom 16.07.10 03:37h" auf dem Desktop anlegen
- und alle anderen Dateien auf dem Desktop mit dem Namen "Aktuelles Backup vom" löschen
b) wenn das Backup nicht klappt
- am Ende eine Datei auf dem Desktop anlegen mit dem Namen "Sorry ich bin am 16.07.10 in die Grütze gegangen - Dein Backup"
- und keine anderen Dateien löschen

Täglich laufende Bätche werden i.d.R. nicht dazu zusammengeschrotet, dass sie jeden gatesverdammten Tach gedoppelklickt werden.

Grüße
Biber
Bitte warten ..
Mitglied: ghostX
16.07.2010 um 14:15 Uhr
Hi Biber,

welche Windows Version benutzt du denn? Also so viel ich weiß gibt es ab Windows 98 eine Funktion die heißt "Geplante Tasks"
Die Batchdatei wird also nicht manuell (wär ja schlimm) sondern per geplanten Task täglich automatisch ausgeführt und die Logdatei auf einem Onlineportal angezeigt. Und das funktioniert auch alles so weit gut mit anderen Batchdateien...

Hatte ich nicht für nötig gehalten es zu erwähnen wie die Datei ausgeführt wird....
Bitte warten ..
Mitglied: Biber
16.07.2010 um 14:41 Uhr
Moin ghostX,

na ja, wenn es denn sein soll...

Für die Anforderung
Also zusammengefasst:
Überprüfe in einem Verzeichnis X ob eine beliebige Datei mit aktuellem Datum vorhanden ist,
wenn nein, schreibe mir in die Logdatei "Backup nicht aktuell"

würde ich eine möglichst simple Prüfung vornehmen, also z.B.
01.
dir z:\backups\2010\*.bkf|findstr /b "%date%">nul && @echo Datei *.bkf vom %date% liegt vor >>d:\eine\Logdatei 
02.
-bzw- 
03.
dir z:\backups\2010\*.bkf|findstr /b "%date%">nul || @echo KEIN Backup vom %date% vorhanden. >>d:\eine\Logdatei
Die "DIR z:\backups\2010\*.bkf" muss du anpassen... kannst aber genau diesen Befehl auch am CMD-Prompt antesten.
Wenn dabei überhaupt *.bkf (oder welche Endung du verwendest) gefunden werden, dann steht das Dateidatum am Anfang der Zeile.
Am Anfang der Zeile prüft FindStr.exe mit dem Parameter /b
Das doppelte Ampersand (&&) bedeutet soviel wie "Wenn es geklappt hat, dann tue.."
Das doppelte Pipezeichen (||) bedeutet soviel wenn "Wenn du abgelosed hast, dann bereue und tue.."

Grüße
Biber

P.S. Ich hab sogar schon Windows 99 Professional
Bitte warten ..
Mitglied: ghostX
16.07.2010 um 17:26 Uhr
Hi Biber,

danke jetzt passt es

Wie funktioniert es eigentlich wenn ich mehrere Verzeichnisse durchsuchen will? Muss ich die dann in eine Variable packen und anstelle von "dir" die Variable an der entsprechenden Stelle aufrufen? Habe es nicht hinbekommen

Und was muss ich machen falls keine aktuelle Datei in einem der Verzeichnisse vorhanden ist, dass das betroffene Verzeichnis in der Logdatei mit drin steht --> "Kein aktuelles Backup vorhanden in Verzeichnis1"
Es bringt ja nix wenn ich dann alle Verzeichnisse trotzdem manuell durchsuchen muss um rauszukriegen wo es fehlt.
Bitte warten ..
Mitglied: Biber
16.07.2010 um 18:23 Uhr
Moin ghostX,

ich liebe es, wenn man Laufe einer entspannten Plauderei von Ästlein auf Zweiglein kommt
....oder im Laufe eines Zentimeter um Zentimeter wachsenden Threads so langsam vom Abstrakten aufs Konkrete...

Ganz ganz weit oben hatten wir mal begonnen mit einer Dummy-Version, die nach einem
Set Dateien="C:\Dateien\*"
ein flaches Wackel-mal-über-die-Dateien macht mit
for %%i in (%Dateien%)

Okay, jetzt sind wir gefühlte 53cm weiter in Thread... dann lass uns doch mal ein bisschen realistischer werden.

Konkret:
Was hast du dir für eine Sicherungsverzeichnisstruktur ausgedacht?
Gibt es irgendwo ein "Rootverzeichnis" für alle Sicherungen (meinetwegen "F:\Sicherungen\" ) ? Oder drei verschiedene?
Und darunter dann eine Struktur wie
.F:\Sicherungen\UnsaServer
.F:\Sicherungen\UnsaServer\Daily
.F:\Sicherungen\UnsaServer\Monat
.F:\Sicherungen\UnsaServer\Archiv
.F:\Sicherungen\Shakira\Privat
.F:\Sicherungen\LaufwerkD\HanniUndNanni

Und wenn anders, wie?
Welche Verzeichnisse sollen berücksichtigt, welche ignoriert werden?
Welche Dateiendungen sollen berücksichtigt, welche ignoriert werden?

Menno, lass mich doch hier nicht so lange rumraten - du hast doch eine konkrete Vorstellung.
Und wir hier im Forum können doch nur das Handwerkliche beisteuern, wenn wir nun wissen, ob du nageln oder schrauben willst.
Bzw. ob wir einen Hammer für kleine Nägel mitbringen müssen oder eine Schlagbohrmaschine für größe Nägel.
Oder ein paar Wattebällchen für Rigipsplatten-Nägel.

Ich mag jedenfalls nicht auf abstrakter Ebene irgendwelche theoretischen rekursiven Schleifen drehen.
Wenn ich das wollte, dann wäre ich in die FDP eingetreten.

Grüße
Biber
Bitte warten ..
Mitglied: ghostX
16.07.2010 um 19:02 Uhr
Zitat von Biber:
Ganz ganz weit oben hatten wir mal begonnen mit einer Dummy-Version, die nach einem
> Set Dateien="C:\Dateien\*"
ein flaches Wackel-mal-über-die-Dateien macht mit
> for %%i in (%Dateien%)

genau so hatte ichs mir vorgestellt:
Set Dateien="C:\SicherungenA\*","C:\SicherungenB\*","C:\SicherungenX\*"

Gibt es irgendwo ein "Rootverzeichnis" für alle Sicherungen (meinetwegen "F:\Sicherungen\" ) ? Oder drei
verschiedene?

Nein es gibt kein Rootverzeichnis. Es sind mehrere verschiedene Verzeichnisse, Laufwerke oder sogar verschiedene PC´s mit IP angabe (\\171.1.2.3\c$\*)

Welche Verzeichnisse sollen berücksichtigt, welche ignoriert werden?

Alle Verzeichnisse die ich aufliste

Welche Dateiendungen sollen berücksichtigt, welche ignoriert werden?

Was für eine Rolle spielen denn die Dateiendungen wenn ich sage: Suche Verzeichnis C:\SicherungenB\*
Es sollen alle Dateien in den angegebenen Verzeichnissen berücksichtigt werden, nicht mehr und nicht weniger

Oder ein paar Wattebällchen für Rigipsplatten-Nägel.

Was??

Wenn ich das wollte, dann wäre ich in die FDP eingetreten.

Über Politik kann ich dir nicht viel sagen, ich weiß nur dass die da oben alles Geldgeier sind.

Grüße
Bitte warten ..
Mitglied: Biber
16.07.2010 um 19:42 Uhr
Ahhhhhhh, ghostX,

jetzt hab ich das verstanden, dass in diesem "Set dateien=..." auch eine Liste von Verzeichnissen stehen kann.

Okay, dann nehmen wir doch eines der naheliegenden, aber undokumentierten Features der FOR /D-Anweisung.

Wenn du dieser Demo am CMD-Prompt folgst:
>for /d %i In (d:\temp\,d:\tmpdn\,d:\work\) do @dir /b /a:-d /s %i 2>nul 
d:\temp\103306.BAN.multi.pdf 
d:\temp\alleDwgs.txt 
d:\temp\wemdas.cmd 
d:\temp\wemdas.txt 
d:\temp\WemdasAuswertung.txt 
d:\tmpdn\DebugView.zip 
d:\tmpdn\disk-defrag-setup.exe 
d:\tmpdn\OOo_3.2.1_Win_x86_install_de.exe 
d:\tmpdn\ProcessExplorer.zip 
d:\tmpdn\ProcessMonitor.zip 
d:\tmpdn\seamonkey-2.0.5.zip 
d:\tmpdn\vb_web.exe 
d:\tmpdn\werkzeuge.xls 
d:\tmpdn\DebugView\dbgview.chm 
d:\tmpdn\DebugView\Dbgview.exe 
d:\tmpdn\DebugView\Eula.txt 
d:\work\Dougknox.vbs
...dann siehst du die Änderung, die du oben bei dir im Schnipsel machen musst.
Ich mache ja hier genau das, was du angefragt hast
for /d %i In (d:\temp\,d:\tmpdn\,d:\work\) do @dir /b /a:-d /s %i 2>nul

-> FOR /D %i .... Wackele über alle Directorys (daher das /D)
-> die ich in der Klammer aufzähle... entspricht deiner Liste in "Set Dateien=d:\temp\,d:\tmpdn\,d:\work\"
-> DO irgendwas .... und zwar genau diese DIR+Findstr-Zeile aus dem vorangegangenen Kommentar.
Neu dazu gekommen ist jetzt nur das "2>nul" nach dem DIR ---> das ist nur kosmetisch, um alle "Keine Dateien gefunden"-Meldungen bei leeren Verzeichnissen auszublenden. [ist bei dir egal - du filterst ohnehin nach "Datum heute" alles weg.

Da, wo in der Demo am CMD-Prompt EIN %i steht, muss im Batch %%i stehen.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Userverwaltung
gelöst Ordner und Dateien in Domänenprofilen ausschließen (8)

Frage von BleppSatter zum Thema Windows Userverwaltung ...

Batch & Shell
gelöst Problem mit "username" abfrage in Batch Dateien (5)

Frage von KriAIT zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien mit vorgegebener Größe erstellbar? (3)

Frage von Stefan007 zum Thema Batch & Shell ...

C und C++
gelöst IF Abfrage funktioniert nicht mehr (2)

Frage von pablovic zum Thema C und C ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...