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

Xcopy mit Parameter D - Kopieren von Dateien, die neuer sind als ein spezieller Zeitsstempel

Frage Entwicklung Batch & Shell

Mitglied: ulirlk

ulirlk (Level 1) - Jetzt verbinden

17.03.2008, aktualisiert 19.03.2008, 14397 Aufrufe, 7 Kommentare

Hallo,
ich habe folgendes Problem: In einem speziellen Ordner eines Subsystems werden in unterschiedlichen Zeitabständen Word-Dokumente zum Export in ein anderes System bereitgestellt.

Ich möchte nun den Kopierprozeß in dieses andere System automatisieren über eine Batch-Datei. Mein Script sieht momentan so aus:

Zunächst setze ich einige Variablen:

@ECHO OFF
CLS
SET _FILE_COPY_LOG=V:\Ordner1\Logdatei\Logdatei.log
SET _QUELL_LAUFWERK=W:
SET _QUELL_DATEI_ENDUNG=doc
SET _QUELL_ORDNER_DATEIEN=W:\Subsystem_export
SET _ZIEL_ORDNER_DATEIEN=V:\Import

Zur Protokollierung soll Datum und Uhrzeit mitgeschrieben werden:
echo >> %_FILE_COPY_LOG%
echo -----------------------------Neuer Durchlauf------------------------------- >> %_FILE_COPY_LOG%
echo >> %_FILE_COPY_LOG%
date /t >> %_FILE_COPY_LOG%
time /t >> %_FILE_COPY_LOG%

Jetzt beginnen meine "Probleme". Aus dem Inhalt von 4 verschiedenen Textdateien (jeweils nur eine Zeile) sollen 4 Variablen mit Leben gefüllt werden. Diese 4 Textdateien sind beim allerersten Durchlauf der Batch von mir "per Hand" erzeugt worden und sollen später durch das Programm automatisch neu verändert werden.

@for /f "delims=" %%i in (V:\Ordner1\Logdatei\Tag.txt) do echo set /p Tag = %%i
@for /f "delims=" %%j in (V:\Ordner1\Logdatei\Monat.txt) do echo set /p Monat = %%j
@for /f "delims=" %%k in (V:\Ordner1\Logdatei\Jahr.txt) do echo set /p Jahr = %%k
@for /f "delims=" %%l in (V:\Ordner1\Logdatei\Uhrzeit.txt) do echo set /p Uhrzeit = %%l

Nun möchte ich NUR die Dateien kopieren, die NACH dem "Zeitstempel" erzeugt wurden. Der Zeitstempel setzt sich aus Tag, Monat, Jahr und Uhrzeit wie o.a. zusammen. Gleichzeitig soll das Ereignis protokolliert werden.

xcopy %_QUELL_ORDNER_DATEIEN% %_ZIEL_ORDNER_DATEIEN% /D:%Monat%-%Tag%-%Jahr% >> %_FILE_COPY_LOG%

Und hier kommt es zur Fehlermeldung: Unzulässiger Parameter: D/--
Verstehe ich nicht, da ich die Variablen doch gesetzt habe ??!!

Noch nicht berücksichtigt habe ich die Uhrzeit (weiß nicht, wie ich die einbauen kann). Aber es müßte doch wenigstens mit den Angaben Tag, Monat und Jahr funktionieren!!!!

Ich habe beim Stöbern noch eine andere "Art" des Füllens von Variablen durch Auslesen von Textdateien gefunden und ausprobiert. Leider mit dem gleichen negativen Ergebnis:

@set /P Tag=<V:\Ordner1\Logdatei\Tag.txt
@set /P Monat=<V:\Ordner1\Logdatei\Monat.txt
@set /P Jahr=<V:\Ordner1\Logdatei\Jahr.txt
@set /P Uhrzeit=<V:\Ordner1\Logdatei\Uhrzeit.txt

Auch hier erhalte ich als Fehlermeldung: Unzulässiger Parameter D/

Im weiteren Verlauf soll die Batchdatei einen neuen Zeitstempel erzeugen und ihn dann abspeichern:

@for /f "tokens=1 delims=." %%a in ("%date%") Do @set var1=%%a
@for /f "tokens=2 delims=." %%b in ("%date%") Do @set var2=%%b
@for /f "tokens=3 delims=." %%c in ("%date%") Do @set var3=%%c


echo %var1% > V:\Ordner1\Logdatei\Tag.txt
echo %var2% > V:\Ordner1\Logdatei\Monat.txt
echo %var3% > V:\Ordner1\Logdatei\Jahr.txt
echo %time% > V:\Ordner1\Logdatei\Uhrzeit.txt

Ist (wahrscheinlich) ein bißchen umständlich, aber dieser Teil der Batch funktioniert:

Ich hoffe, ich habe das Problem so geschildert, dass man es nachvollziehen kann ???

Grüße,
Uli
Mitglied: bastla
17.03.2008 um 15:17 Uhr
Hallo ulirlk und willkommen im Forum!

Versuch es mit folgender Zeile (als Vorlage für die weiteren):
01.
for /f "delims=" %%i in (V:\Ordner1\Logdatei\Tag.txt) do set Tag=%%i
Der Hilfe zu "xcopy" ist zu entnehmen, dass für "/D" nur ein Datum, aber keine Uhrzeit angegeben werden kann.
Noch eine Alternative zum Zwischenspeichern des kompletten Timestamps (bzw eigentlich "Date"stamps ):
01.
echo %date:~-7,2%-%date:~-10,2%-%date:~-4%>V:\Ordner1\Logdatei\Timestamp.txt
Die Begründung, warum %date% von "hinten" (-7) her zerlegt wird, ist die zwischen W2000 und XP unterschiedliche Ausgabe (mit/ohne Wochentag) - so funktioniert es mit beiden Systemen (BTW: Das von Dir verwendete BS lässt sich zwar erraten, Du solltest es aber trotzdem besser auch anführen).

Grüße
bastla
Bitte warten ..
Mitglied: ulirlk
17.03.2008 um 16:20 Uhr
Hallo bastla,
danke für deinen Tip. Zunächst einmal BS ist Windows 2003.

Ich habe jetzt die Erstellung des Zeitsstempels so wie du es beschrieben hast unten in meiner Batch geändert:

echo %date:~-7,2%-%date:~-10,2%-%date:~-4%>V:\Ordner1\Logdatei\Timestamp.txt

Es wird auch beim Durchlauf die Datei mit dem heutigen Datum erzeugt. Jetzt habe ich im oberen Bereich das Auslesen aus den 4 Dateien Tag, Monat, Jahr und Uhrzeit abgeändert, so dass nur die Datei Timestamp.txt abgefragt wird:

also:
@for /f "delims=" %%i in (V:\Ordner1\Logdatei\Tag.txt) do echo set /p Tag = %%i
@for /f "delims=" %%j in (V:\Ordner1\Logdatei\Monat.txt) do echo set /p Monat = %%j
@for /f "delims=" %%k in (V:\Ordner1\Logdatei\Jahr.txt) do echo set /p Jahr = %%k
@for /f "delims=" %%l in (V:\Ordner1\Logdatei\Uhrzeit.txt) do echo set /p Uhrzeit = %%l

komplett ersetzt durch:
for /f "delims=" %%i in (V:\Ordner1\Logdatei\Timestamp.txt) do set Timestamp = %%i

Die nächste Zeile:
xcopy %_QUELL_ORDNER_DATEIEN% %_ZIEL_ORDNER_DATEIEN% /D:%Monat%-%Tag%-%Jahr% >> %_FILE_COPY_LOG%

habe ich dann abgeändert in:
xcopy %_QUELL_ORDNER_DATEIEN% %_ZIEL_ORDNER_DATEIEN% /D:%Timestamp% >> %_FILE_COPY_LOG%

und erhalte leider die Fehlermeldung: Unzulässige Option

Verstehe ich nicht, da der Inhalt von Timestamp doch 03-17-2008 ist und somit der Xcopy-Befehl mit Parameter D richtig gesetzt ist?????
Bitte warten ..
Mitglied: bastla
17.03.2008 um 17:09 Uhr
Hallo ulirlk!

In Batchdateien solltest Du möglichst wenige Leerzeichen verwenden, daher:
01.
for /f "delims=" %%i in (V:\Ordner1\Logdatei\Timestamp.txt) do set Timestamp=%%i
Grüße
bastla

P.S.: Falls Dir (hoffentlich) die Formatierung der obigen Befehlszeile gefällt: Das kannst Du in Deinen Kommentaren auch haben - einfach zwischen <code>-Tags setzen ...
Bitte warten ..
Mitglied: ulirlk
18.03.2008 um 08:41 Uhr
Hallo bastla,
vielen Dank für den Hinweis mit den Leerzeichen. Hat funktioniert. Hatte das wegen der Übersichtlichkeit gemacht und prompt "das Eigentor" geschossen. Werde das also zukünftig vermeiden.

Damit ist mein Problem aber (leider) nur zur Hälfte gelöst. Ich kann jetzt zwar alle Dateien ab dem Datum des Zeit-/Tagesstempels kopieren, aber eben nicht NUR DIE ab einer gewissen Uhrzeit.

Gibt es da vielleicht einen anderen Weg??

Warum ich nur diese Dateien brauche:
Die kopierten Dokumente aus dem Subsystem sollen in dem anderen System weiterverarbeitet werden, d.h. sobald die Dokumente kopiert sind, sollen diese Dokumente nach Bearbeitung aus dem Zielordner wieder entfernt werden. Läuft aber meine Batch dann erneut an, kopiert sie mir wieder ALLE Dokumente des Tages in den Zielordner.....murks......

Kann ich die Namen der schon kopierten Dokumente eventuell in eine Datei (vielleicht ini) schreiben, so dass die Batch beim Kopiervorgang in die Datei "reinschaut" und nur die Dokumente kopiert, die NOCH NICHT vorher schon einmal kopiert wurden?

Grüße,
Uli
Bitte warten ..
Mitglied: bastla
18.03.2008 um 09:47 Uhr
Hallo ulirlk!

Um Dateien nur ein einziges Mal zu kopieren, bietet "xcopy" mit dem Schalter "/m" eine bessere Möglichkeit.

Hintergrund: Wenn eine Datei verändert wird (inkludiert auch das erstmalige Speichern), wird als Kennzeichen für "noch zu archivieren" das "Archiv-Attribut" (oder "Archiv-Bit") gesetzt - kannst Du Dir im Explorer unter "Dateieigenschaften / Erweitert" oder mit dem CMD-Befehl "attrib" anzeigen lassen bzw selbst verändern. Bei einer Datensicherung wird dieses Attribut üblicherweise gelöscht, damit eine Inkrementsicherung (= nur veränderte Dateien) möglich wird.

Der genannte Schalter "/m" sorgt nun dafür, dass nur Dateien mit gesetztem Archiv-Bit kopiert werden und (im Gegensatz zu "/a") entfernt danach diese Kennzeichnung.

Falls also nicht eine zwischenzeitliche Datensicherung des Quellordners durchgeführt wird, sollte es mit "xcopy /m" eigentlich klappen.

Grüße
bastla
Bitte warten ..
Mitglied: ulirlk
18.03.2008 um 10:00 Uhr
Hallo bastla,
vielen Dank für den Tip. Kann ihn (leider) erst morgen ausprobieren, werde dann aber berichten.

Grüße, Uli
Bitte warten ..
Mitglied: ulirlk
19.03.2008 um 12:36 Uhr
Hallo bastla,
toller Tip. Hat funktioniert. Echt klasse. Vielen Dank.

Grüße, Uli
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Batch & Shell
Dateien kopieren die nicht mehr verändert werden? (10)

Frage von pbelcl zum Thema Batch & Shell ...

Windows Server
gelöst Administrator kann auf Server keine EXE-Dateien kopieren, löschen, anlegen (5)

Frage von Winfried-HH zum Thema Windows Server ...

Vmware
gelöst Dateien auf eine VM im EXSi kopieren (3)

Frage von Stefan007 zum Thema Vmware ...

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