73 votes

Comment écrire un script batch Windows pour copier le fichier le plus récent à partir d'un répertoire?

J'ai besoin de copier le nouveau fichier dans un répertoire vers un nouvel emplacement. Jusqu'à présent, j'ai trouvé des ressources sur le forfiles de commande, une date liée à la question ici, et une autre question connexe. Je suis juste d'avoir un peu de mal à mettre les pièces ensemble! Comment puis-je copier le nouveau fichier dans ce répertoire à un nouvel endroit?

137voto

Chris Magnuson Points 1009

La accepté de répondre à donne un exemple d'utilisation du nouveau fichier dans une commande et ensuite à la sortie. Si vous avez besoin de faire un fichier bat avec d'autres opérations plus complexes, vous pouvez utiliser les méthodes suivantes pour stocker le nom de fichier du nouveau fichier dans une variable:

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

Maintenant, vous pouvez référencer %NewestFile% dans le reste de votre fichier bat.

Par exemple, voici ce que nous utilisons pour obtenir la dernière version d'une base de données .bak fichier à partir d'un répertoire, le copier sur un serveur, puis restaurez la base de données:

: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"

69voto

PabloG Points 9308

Shell Windows, une doublure:

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

11voto

TimH Points 171

Pour que cela fonctionne avec les noms de fichiers utilisant des espaces, une version modifiée de la réponse acceptée est nécessaire:

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

2voto

Richard Points 11

@Chris Noe

Notez que l'espace devant le & fait partie de la commande précédente. Cela m’a mordu avec SET, qui ajoute heureusement des espaces vides dans la valeur.

Pour contourner l'espace de fin ajouté à une variable d'environnement, placez la commande set entre parenthèses.

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

2voto

moswald Points 4521

Cela ouvrira une deuxième fenêtre cmd.exe. Si vous voulez qu'il s'en aille, remplacez le / K par / C.

Évidemment, remplacez new_file_loc par le nouvel emplacement de votre fichier.

 @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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X