Batch-Datei zu finden, die neueste Datei in Ordner kopieren und umbenennen in einen anderen Ordner
Fand die gleiche Frage hier.. ich versuche den code zu verwenden, aber für meine Daten. Ich bin kein Programmierer.. ich kann fast jede code-und es funktioniert für mich aber.
Wie man code eine batch-Datei kopieren und umbenennen, die zuletzt datierten Datei?
Hier ist mein
@echo on
setLocal DisableDelayedExpansion
pushd N:\
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%G in ('dir/b/od') do (set newest=%%G)
copy %newest% G:\Server_Files\AMI_DATA\TEXT_FILES\NewFile.csv
PAUSE
POPD
Und die Ergebnisse...
C:\Documents and Settings\belcherj\Desktop\AMI_BATCH>setLocal DisableDelayedExpa
nsion
C:\Documents and Settings\belcherj\Desktop\AMI_BATCH>pushd N:\
N:\>setLocal EnableDelayedExpansion
N:\>for /F "tokens=* delims= " %G in ('dir/b/od') do (set newest=%G )
N:\>(set newest=System Blink Count__2012-06-27 01_00_46.csv )
N:\>(set newest=System Blink Count__2012-06-28 01_00_32.csv )
N:\>(set newest=System Blink Count__2012-06-29 01_00_33.csv )
N:\>(set newest=System Blink Count__2012-06-30 01_00_42.csv )
N:\>(set newest=System Blink Count__2012-07-01 01_00_32.csv )
N:\>(set newest=System Blink Count__2012-07-02 01_00_31.csv )
N:\>(set newest=System Blink Count__2012-07-03 01_00_29.csv )
N:\>(set newest=System Blink Count__2012-07-04 01_00_39.csv )
N:\>(set newest=System Blink Count__2012-07-05 01_00_34.csv )
N:\>(set newest=System Blink Count__2012-07-06 01_00_31.csv )
N:\>(set newest=System Blink Count__2012-07-07 01_00_32.csv )
N:\>(set newest=System Blink Count__2012-07-08 01_00_30.csv )
N:\>(set newest=System Blink Count__2012-07-09 01_00_40.csv )
N:\>(set newest=System Blink Count__2012-07-10 01_00_29.csv )
N:\>(set newest=System Blink Count__2012-07-11 01_00_44.csv )
N:\>(set newest=System Blink Count__2012-07-12 01_00_34.csv )
N:\>copy System Blink Count__2012-07-12 01_00_34.csv G:\Server_Files\AMI_DATA\TE
XT_FILES\NewFile.csv
The system cannot find the file specified.
N:\>PAUSE
Press any key to continue . . .
Ich denke es hat etwas zu tun mit den Leerzeichen im Dateinamen ... ich versuchte einige andere code, den ich gefunden und es gab die gleichen Ergebnisse. Im in der Nähe nur einen kleinen Schubs brauchen.
Danke für deine Zeit und Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte diese Arbeit
Sind Sie richtig, Ihre unmittelbare problem ist das Leerzeichen im Dateinamen. Sie könnten das problem beheben, indem Sie hinzufügen Zitate:
copy "%newest%" "G:\Server_Files\AMI_DATA\TEXT_FILES\NewFile.csv"
Aber es gibt andere Probleme. Die FÜR den Optionen sollte "eol=: delims=". Ihre bestehenden Optionen wird scheitern, wenn der Datei-name beginnt mit Leerzeichen oder Semikolon.
Dein code kann auch fehlschlagen, wenn ein Dateiname enthält ein Ausrufezeichen, weil Sie verzögert haben epansion aktiviert, wenn Sie die FÜR %%D variable. Sie aktiviert verzögerte Erweiterung, doch Sie nutzen Sie nicht.
Code kann auch fehlschlagen, wenn der Letzte "Datei" aufgeführt passiert ein Verzeichnis statt auf eine Datei. Sie möchten die
DIR /A-D
option filter aus directory-Namen.Oops! meine ursprüngliche gepostete code nicht funktioniert, weil die PUSHD entfernt worden war, und DIR /B nicht enthalten Pfadangabe in der Ausgabe.
Hier ist eine Lösung, die vermeidet, dass die potenziellen Probleme und fügt auch einige zusätzliche Fehler zu überprüfen:
Deaktivieren verzögerte Erweiterung ist wohl nicht nötig, da es der default-Zustand ist auf den meisten Anlagen. Aber es kann nicht Schaden.
Seit SETLOCAL verwendet wird, werden alle änderungen an die Umwelt verloren, sobald das Skript beendet. (Es gibt eine implizite ENDLOCAL, sobald das Skript beendet). Die ENDLOCAL (implizit oder explizit) auch macht die Ergebnisse von PUSHD, das ist der Grund, warum POPD ist nicht erforderlich.
Definierte ich ein beenden - "makro" machen es bequem, immer beenden Sie das Skript mit den gleichen zwei Befehle: "PAUSE" gefolgt von "EXIT" /B. Die EXIT /B ist nicht erforderlich, die ganz am Ende des scripts, aber es tut nicht weh.
Das Skript kann etwas effizienter gemacht, indem zunächst die Dateien in absteigender chronologischer Reihenfolge und mit GOTO, break aus der Schleife nach dem 1. Datei.
oder die Datei kopiert werden kann innerhalb der Schleife ohne die Festlegung einer Umgebungsvariable, an welcher Stelle das Skript kann am Ende sofort: