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...

Mitglied: Vanessa

Vanessa (Level 1) - Jetzt verbinden

03.06.2011, aktualisiert 04.06.2011, 6528 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 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 ...

Batch & Shell

Kopieren einer Datei in mehrere Ordner mit PowerShell

gelöst Frage von FRANHEBatch & Shell7 Kommentare

Hallo zusammen, ich habe folgendes Problem. Ich würde gerne eine Datei *.xml aus dem Ordner C:\Testing\xml in den Ordner ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 4 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 9 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 23 StundenSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server38 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server23 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless21 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...