2016-08-18 5 views
0

Ich brauche ein Skript, das Dateien kopiert, die neuer sind als eine bestimmte Zeit (aus einer Datei lesen) aus einem Verzeichnis und Unterordnern zu einer Spiegelung Ordnerstruktur (das muss sein erstellt). Dies muss jedoch berücksichtigt werden Datum und Uhrzeit, nicht nur Datum.Batch: Kopieren Sie nur Dateien neuer als Datum und Uhrzeit

Ich kann nicht scheinen, einen Weg zu finden, dies mit Batch/Robocopy oder einem anderen Ansatz zu tun. Irgendwelche Vorschläge würden geschätzt, im Idealfall nicht mit Powershell (ich weiß, es kann wahrscheinlich tun, aber ich habe es noch nie verwendet und die Lernkurve scheint ein wenig steil für jetzt).

Ich kann das in der Datei gespeicherte Datum/Uhrzeit an jedes Format anpassen.

Also, sagen Datum-Zeit 2016-08-17-18-00-00 ist, dann

Org\A\1.txt  (2016-08-17-18-01-00) > Target\A\1.txt 
Org\A\2.txt  (2016-08-17-17-00-00) > (not copied, as too old) 
Org\B\C\D\3.txt (2016-08-18-09-00-00) > Target\B\C\D\3.txt 

ich wahrscheinlich eine forfiles Schleife verwenden müssen, aber nicht sicher, wie Konto Zeit in Anspruch nehmen als gut als Datum.

+1

Sie haben so ein wunderbares Format - Sie können nur String Vergleich tun "wenn" 2016-08-17-18-01-00 "gtr" 2016-08-17-18-00-00 "... '. Verwenden Sie eine 'for'-Schleife, um die Datei zu verarbeiten. 'for /?', 'if /?' – Stephan

+0

Verwenden Sie forfiles, um eine exclude.txt-Datei zu generieren, die alle alten Dateinamen enthält. Übergeben Sie das dann an 'xcopy/EXCLUDE: exclude.txt' – FloatingKiwi

+1

@FloatingKiwi:' forfiles' arbeitet nur mit Datumsangaben, keine Male. – Stephan

Antwort

0
@echo off 
setlocal enabledelayedexpansion 
set compare=201608171800 

for /r %%F in (*) do (
    set file=%%~fF 
    for /f "tokens=2 delims=.=" %%I in ('wmic datafile where name^="!file:\=\\!" get lastmodified /format:list') do (
    if "%%I" geq "%compare%" for /f "tokens=2,* delims=\" %%A in ("%%~fF") do echo %%~fF -- N:\target\%%B 
) 
) 

Sie müssen möglicherweise die "2" in tokens=2,* an Ihre Bedürfnisse anpassen.

Hinweis: Dies ist langsam, weil der wmic
wegen String-Vergleich dies mit %compare% Format von YYYYMMDDhhmmss oder YYYYMMDDhhmm oder sogar YYYY funktioniert.

+0

Danke. Wenn jemand das hier anschaut und einen reinen Batch-Weg kennt, würde ich das sehr schätzen. Obwohl es einfach nicht existieren könnte. – Nick

+0

ahem ... das ** ist ** reine Charge ... – Stephan

+0

meinte ich ohne WMIC. – Nick

Verwandte Themen