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?
Réponses
Trop de publicités?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"
@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)
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