Top-Themen

Aktuelle Themen (A bis Z)

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

Nur Ordner kopieren, die Dateien enthalten junger als...

Frage Entwicklung Batch & Shell

Mitglied: Vanessa

Vanessa (Level 1) - Jetzt verbinden

03.06.2011, aktualisiert 04.06.2011, 6444 Aufrufe, 6 Kommentare

Hallo Leute,

ich versuche diesen Ablauf per Batch zu lösen, kriege es aber nicht hin. Kann mir jemand vielleicht helfen?

Ausgangsituation:
In einem Ordner sind mehrere Ordner enthalten. (Sie haben alle einen Namensmuster, z.B. "deploy_...")

Ziel:
Von diesen Ordner nur diejenigen zu kopieren (komplett, mit dem gesammten Inhalt und Struktur), welche innerhalb von einem der Unterverzeichnisse mindestens eine Datei enthalten, die junger ist als vorgegebener Parameter (ein Datum).

Hat jemand eine Idee?
Mitglied: Friemler
03.06.2011 um 11:51 Uhr
Hallo Vanessa,

der Titel Deiner Frage "Nur Ordner kopieren, die Dateien enthalten älter als..." wieder spricht der Aussage "Von diesen Ordner nur diejenigen zu kopieren (komplett, mit dem gesamten Inhalt und Struktur), welche innerhalb von einem der Unterverzeichnisse mindestens eine Datei enthalten, die junger ist als vorgegebener Parameter (ein Datum)". Was denn nun?

Auf welcher Ebene der Verzeichnisstruktur soll denn geprüft werden, ob es Dateien gibt, die das Datumskriterium (wenn das denn mal eindeutig festgelegt ist) erfüllen?

Auf welchem/n Betriebssystem(en) soll das Script laufen?

Warum willst Du eine komplette Verzeichnisstruktur kopieren, wenn nur eine Datei irgendwo darin das Datumskriterium erfüllt?

Gruß
Friemler
Bitte warten ..
Mitglied: Vanessa
04.06.2011 um 15:08 Uhr
Hallo Friemler,

danke für Feedback! Sorry, gestern war ein verrückter Tag. ;)

der Titel Deiner Frage "Nur Ordner kopieren, die Dateien enthalten älter als..." wieder spricht der Aussage..
Was denn nun?


Bereits korrigiert. "junger" natürlich, danke für die Aufmerksammkeit!

Auf welcher Ebene der Verzeichnisstruktur soll denn geprüft werden, ob es Dateien gibt, die das Datumskriterium (wenn das denn mal eindeutig festgelegt ist) erfüllen?

Variabel. Auf allen im jeweilinen Ordner vorhandenen Ebenen.

Auf welchem/n Betriebssystem(en) soll das Script laufen?

Win XP, SP 3

Warum willst Du eine komplette Verzeichnisstruktur kopieren, wenn nur eine Datei irgendwo darin das Datumskriterium erfüllt?

Hm.. eine gute Frage. Die Verzeichnisse sind Deploy-Ordner von einem Test-System.
Sie könnten theoretisch Dateien enthalten, die früher geändert wurden, als der Parameter angibt, sollen aber beim späteren Vergleich mit dem Live-Stand nicht verloren gehen. Dieses ist aber eher eine zusätzliche Sicherheitsmassnahme, die wünschenswert, aber nicht obligatorisch ist, wenn man mit dem Datum-Parameter aufmerksam umgeht. Vielleicht hast Du Recht: es würde reichen, wenn nur die entsprechende Dateien kopiert werden. Beim richtig angegenenen Datum-Parameter werden es sowieso alle sein, stimmt? Wichtig dabei ist, dass die Ordner-Struktur beibehalten wird.

Ich denke dabei an xcopy (mit /d und /s Options) und innere for-Schleifen, kriege es alleine aber noch nicht hin.
Bitte warten ..
Mitglied: Friemler
04.06.2011 um 17:12 Uhr
Hallo Vanessa,

teste mal das hier:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "SrcDir=%~1" 
07.
set "DestDir=%~2" 
08.
 
09.
for /f "eol= tokens=1-3 delims=." %%d in ("%~3") do ( 
10.
  set "Day=%%d" 
11.
  set "Month=%%e" 
12.
  set "Year=%%f" 
13.
14.
 
15.
set "YoungerThan=%Month%-%Day%-%Year%" 
16.
 
17.
 
18.
for /d %%d in ("%SrcDir%\*.*") do ( 
19.
  for /f "delims=" %%f in ('xcopy /ehl /d:%YoungerThan% "%%d\*.*" c:\ ^| find /v "Datei(en) kopiert"') do ( 
20.
    set "ActDirFullPath=%%d" 
21.
    set "ActDirName=%%~nxd" 
22.
    call :ProcessDir 
23.
24.
25.
 
26.
exit /b 
27.
 
28.
 
29.
 
30.
:ProcessDir 
31.
  if "%OldDir%" equ "%ActDirFullPath%" exit /b 
32.
  set "OldDir=%ActDirFullPath%" 
33.
  xcopy /kreischy "%ActDirFullPath%\*.*" "%DestDir%\%ActDirName%" 
34.
exit /b
Den Code z.B. als DeployCopy.cmd speichern. Aufruf mit
DeployCopy "QuellVerzeichnis" "ZielVerzeichnis" TT.MM.YYYY
QuellVerzeichnis enthält Deine Deploy-Verzeichnisse, ZielVerzeichnis ist ja klar und TT.MM.YYYY ist das Datum, also im Format "Tag Punkt Monat Punkt Jahr".

In den Zeilen 9-15 wird das übergebene Datum in seine Bestandteile zerlegt und so neu zusammengestellt, dass es für den XCOPY-Befehl in Zeile 19 verwertbar ist.

Die Zeile 18 liefert alle Verzeichnisse im Quellverzeichnis, in denen der XCOPY-Befehl in Zeile 19 dann nach Dateien sucht, die jünger als das angegebene Datum sind. Wegen dem Parameter /l werden die gefundenen Dateien nur aufgelistet, nicht kopiert.

Wenn Dateien gefunden werden, wird ins Unterprogramm ProcessDir gesprungen. Hier wird das von der äußeren FOR-Schleife im Hauptprogramm aktuell verarbeitete Verzeichnis in eine Variable geschrieben. Nur wenn das beim letzten Aufruf von ProcessDir gemerkte Verzeichnis vom aktuellen verschieden ist, wird mit dem XCOPY-Befehl in Zeile 33 das aktuelle Deploy-Verzeichnis kopiert. So wird verhindert, dass die Kopieraktion eines Deploy-Verzeichnisses mehrmals durchgeführt wird, auch wenn XCOPY aus Zeile 19 mehrere jüngere Dateien findet.

Gruß
Friemler
Bitte warten ..
Mitglied: Vanessa
04.06.2011 um 20:37 Uhr
wow!

Der Trick mit "virtuellen Listen" in der Zeile 19 ist super! Das Umgehen mit lokalen Variablen war auch sehr lehrreich für mich.
Funktioniert genau wie gewünscht! Herzlichen Dank!!

Friemler, Du bist gut. ;)

Gruss
Vanessa
Bitte warten ..
Mitglied: Friemler
05.06.2011 um 03:49 Uhr
Hallo Vanessa,

gern geschehen.

Aber mit "virtuellen Listen" hat das eigentlich nichts zu tun. Ich benutze in Zeile 19 XCOPY nur dazu, um den Aufruf des Unterprogramms ProcessDir zu triggern. Sobald XCOPY etwas ausgibt (Namen von gefundenen Dateien), wird der Rumpf der FOR-Schleife ausgeführt (Zeilen 20 bis 22) und damit das Unterprogramm gestartet. Die Ausgabe von dem Zeile-19-XCOPY wird nicht weiterverarbeitet.

Um Zeit zu sparen und wirklich nur die jüngeren Dateien in ein Verzeichnis mit den Master-Versionen der verschiedenen Deploy-Ordner einzupflegen, könntest Du folgende gekürzte Version verwenden:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "SrcDir=%~1" 
07.
set "DestDir=%~2" 
08.
 
09.
for /f "eol= tokens=1-3 delims=." %%d in ("%~3") do ( 
10.
  set "Day=%%d" 
11.
  set "Month=%%e" 
12.
  set "Year=%%f" 
13.
14.
 
15.
set "YoungerThan=%Month%-%Day%-%Year%" 
16.
 
17.
 
18.
for /d %%d in ("%SrcDir%\*.*") do ( 
19.
  xcopy /krischy /d:%YoungerThan% "%%d\*.*" "%DestDir%\%%~nxd" 
20.
)
Sollte das Zielverzeichnis auf einer Netzwerkfreigabe liegen, wäre ROBOCOPY für die Aufgabe besser geeignet, da es Sicherheitsmechanismen gegen Netzwerkfehler eingebaut hat.

Gruß
Friemler
Bitte warten ..
Mitglied: Vanessa
05.06.2011 um 16:01 Uhr
Ok, alles klar.

Ich habe mich vielleicht etwas doof ausgedrückt: mit "virtuellen Liste" meinte ich die Ausgabe von xcopy - die Liste von jungeren Dateien. Dann kopiert (wenn nicht bereits geschehen) das Unterprogramm den gesamten (sehr gut!) Inhalt vom aktuellen Deploy-Ordner in den gleichnamigen Zielordner. Was kann man sich da noch mehr wünschen!! ))

Besten Dank noch mal!

Gruss
Vanessa
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Ordner durchsuchen - wenn "bestimmter Text" in einer Datei enthalten, diese Datei in einen anderen Ordner kopieren oder verschieben
gelöst Frage von ConcurveBatch & Shell14 Kommentare

Hallo zusammen, ich habe ein Problem bei der Erstellung einer *.bat, welche innerhalb eines zu definierenden Ordners alle Dateien ...

Batch & Shell
Dateien kopieren, rekursiv in einen Ordner
gelöst Frage von golsinBatch & Shell9 Kommentare

Hallo und noch ein Frohes neues Jahr ;-) Ich bin mal wieder etwas ratlos Ich Versuche von einem Rechner ...

Batch & Shell
Ordner durchsuchen und Dateien kopieren
gelöst Frage von friedensbringerBatch & Shell4 Kommentare

Hallo zusammen, gibt es mittels Batchfile eine Möglichkeit in einem definierten Ordner inklusive allen Unterordnern (mehrere Ebenen möglich) nach ...

Batch & Shell
Ordner nach Dateien absuchen und kopieren
Frage von sbsnewbieBatch & Shell4 Kommentare

Moin Leude, folgende Frage: Ich möchte eine kleine batch bauen um ein Verezeichniss nach Dateien abzusuchen und in eine ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 10 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 17 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 TagWindows 104 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...