Wie schreibe ich einen Windows-Batch-Skript, um die neueste Datei aus einem Verzeichnis zu kopieren?

StackOverflow https://stackoverflow.com/questions/97371

  •  01-07-2019
  •  | 
  •  

Frage

Ich brauche die neueste Datei in einem Verzeichnis an einen neuen Speicherort zu kopieren. Bisher habe ich gefunden Ressourcen auf dem forfiles Befehl, ein datumsbezogene Frage hier, und eine andere bezogene Frage . Ich habe nur ein wenig Mühe zusammen die Stücke setzen! Wie kopiere ich die neueste Datei in diesem Verzeichnis an einen neuen Ort?

War es hilfreich?

Lösung

Windows-Shell, Motto:

FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT

Andere Tipps

Die akzeptierte Antwort gibt ein Beispiel für die neueste Datei in einem Befehl und dann verlassen. Wenn Sie dies in einer Bat-Datei mit anderen komplexen Operationen tun müssen, können Sie die folgende verwenden, um die Dateinamen der neuesten Datei in einer Variablen zu speichern:

FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I

Jetzt können Sie% NewestFile% für den Rest Ihrer Bat-Datei verweisen.

Zum Beispiel hier ist das, was wir verwenden, um die neueste Version einer Datenbank BAK-Datei aus einem Verzeichnis zu erhalten, kopieren Sie es auf einen Server, und dann zur Wiederherstellung der db:

:Variables
SET DatabaseBackupPath=\\virtualserver1\Database Backups

echo.
echo Restore WebServer Database
FOR /F "delims=|" %%I IN ('DIR "%DatabaseBackupPath%\WebServer\*.bak" /B /O:D') DO SET NewestFile=%%I
copy "%DatabaseBackupPath%\WebServer\%NewestFile%" "D:\"

sqlcmd -U <username> -P <password> -d master -Q ^
"RESTORE DATABASE [ExampleDatabaseName] ^
FROM  DISK = N'D:\%NewestFile%' ^
WITH  FILE = 1,  ^
MOVE N'Example_CS' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example.mdf',  ^
MOVE N'Example_CS_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Example_1.LDF',  ^
NOUNLOAD,  STATS = 10"

Um dies zu ermöglichen, mit Dateinamen mit Leerzeichen zu arbeiten, um eine modifizierte Version der akzeptierten Antwort ist erforderlich:

FOR /F "delims=" %%I IN ('DIR . /B /O:-D') DO COPY "%%I" <<NewDir>> & GOTO :END
:END

@ Chris Noe

  Hinweis

, dass der Raum vor dem & Teil des vorherigen Befehls wird.   Das hat mich mit SET gebissen, die gerne folgende Leerzeichen in den Wert bringt.

Um rund um den Hinterraum zu einer Umgebungsvariable hinzugefügt wird, wickeln Sie den Befehl set in parens.

z. FOR /F %%I IN ('DIR "*.*" /B /O:D') DO (SET NewestFile=%%I)

Ich weiß, Sie gebeten, für Windows, aber dachte, dass ich sowieso diese hinzufügen würde, in Unix / Linux können Sie tun:

cp `ls -t1 | head -1` /somedir/

, die alle Dateien im aktuellen Verzeichnis nach Änderungszeit sortiert auflistet und dann cp die jüngste zu / somedir /

Dies wird ein zweites cmd.exe Fenster öffnen. Wenn Sie es weg gehen wollen, ersetzen Sie die / K mit / C.

Natürlich ersetzen new_file_loc mit was auch immer Ihre neuen Speicherort der Datei wird.

@echo off
for /F %%i in ('dir /B /O:-D *.txt') do (
    call :open "%%i"
    exit /B 0
)
:open
    start "window title" "cmd /K copy %~1 new_file_loc"
exit /B 0
@echo off
set source="C:\test case"
set target="C:\Users\Alexander\Desktop\random folder"

FOR /F "delims=" %%I IN ('DIR %source%\*.* /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I & GOTO :END
:END
TIMEOUT 4

Mein Versuch, die neueste Datei von einem Ordner zu kopieren

Sie einfach Ihre Quell- und Zielordner festlegen und es sollte funktionieren

Dies ignoriert Ordner, die Sorge selbst nur mit Dateien

Recommed, dass Sie Dateityp in dem DIR-Pfad wählen *.* Ändern zum Beispiel *.zip

TIMEOUT wird nicht auf winXP arbeite ich denke

Bash:

 find -type f -printf "%T@ %p \n" \
     | sort  \
     | tail -n 1  \
     | sed -r "s/^\S+\s//;s/\s*$//" \
     | xargs -iSTR cp STR newestfile

Dabei steht "newestfile" wird sich die newestfile

Alternativ können Sie newdir / STR oder nur newdir

tun

Aufteilung:

  1. Liste aller Dateien in {time} {Datei} Format.
  2. sortieren sie durch die Zeit
  3. erhalten die letzte
  4. die Zeit, und Leerzeichen von Anfang / Ende abgeschnitten
  5. Kopie resultierender Wert

Wichtig

Nachdem dies einmal ausgeführt wird, die neueste Datei wird alles sein, was Sie gerade kopiert: p (vorausgesetzt, sie sind beide in dem gleichen Suchbereich, das ist). So können Sie einstellen, welche Dateinummer Sie kopieren, wenn Sie dies wünschen, mehr zu arbeiten als einmal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top