J'ai besoin de copier le fichier le plus récent d'un répertoire vers un nouvel emplacement. Jusqu'ici, j'ai trouvé des ressources sur la commande forfiles , une question liée à la date ici, et une autre question liée . J'ai juste un peu de mal à assembler les morceaux! Comment copier le fichier le plus récent de ce répertoire dans un nouvel emplacement?
Windows Shell, une doublure:
FOR /F %%I IN ('DIR *.* /B /O:-D') DO COPY %%I <<NewDir>> & EXIT
La réponse acceptée donne un exemple d'utilisation du fichier le plus récent dans une commande, puis de la fermeture. Si vous avez besoin de le faire dans un fichier bat avec d'autres opérations complexes, vous pouvez utiliser ce qui suit pour stocker le nom du fichier le plus récent dans une variable:
FOR /F "delims=|" %%I IN ('DIR "*.*" /B /O:D') DO SET NewestFile=%%I
Vous pouvez maintenant 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'un fichier .bak de base de données à partir d'un répertoire, le copier sur un serveur, puis restaurer 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"
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
@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)
@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
Ma tentative de copier le dernier fichier d'un dossier
il suffit de définir vos dossiers source et cible et cela devrait fonctionner
Celui-ci ignore les dossiers, ne concerne que les fichiers
Nous vous recommandons de choisir le type de fichier dans le chemin DIR en changeant *.*
à *.Zip
par exemple
TIMEOUT ne fonctionnera pas sous WinXP, je pense
Je sais que vous avez demandé Windows mais que vous pensiez ajouter cela de toute façon. Sous Unix/Linux, vous pouvez le faire:
cp `ls -t1 | head -1` /somedir/
Qui va lister tous les fichiers du répertoire courant triés par date de modification puis cp le plus récent dans/somedir /
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