Xcopy mit Parameter D - Kopieren von Dateien, die neuer sind als ein spezieller Zeitsstempel
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83304
Url: https://administrator.de/forum/xcopy-mit-parameter-d-kopieren-von-dateien-die-neuer-sind-als-ein-spezieller-zeitsstempel-83304.html
Ausgedruckt am: 26.04.2025 um 01:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo ulirlk und willkommen im Forum!
Versuch es mit folgender Zeile (als Vorlage für die weiteren):
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
):
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
Versuch es mit folgender Zeile (als Vorlage für die weiteren):
for /f "delims=" %%i in (V:\Ordner1\Logdatei\Tag.txt) do set Tag=%%i
Noch eine Alternative zum Zwischenspeichern des kompletten Timestamps (bzw eigentlich "Date"stamps
echo %date:~-7,2%-%date:~-10,2%-%date:~-4%>V:\Ordner1\Logdatei\Timestamp.txt
Grüße
bastla
Hallo ulirlk!
In Batchdateien solltest Du möglichst wenige Leerzeichen verwenden, daher:
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 -Tags setzen ...
In Batchdateien solltest Du möglichst wenige Leerzeichen verwenden, daher:
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 -Tags setzen ...
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
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