Disons que je veux copier un fichier d'un endroit à un autre avec ce code:Windows Batch for-loop. Problèmes avec doublequotes
@set FILE=%1
@set SCRDIR=C:\test dir
@set DSTDIR=%SCRDIR%\temp
for %%f in ("%SCRDIR%\%FILE%") do @(
echo Copying "%%f" to "%DSTDIR%"
copy "%%f" "%DSTDIR%"
)
Le fichier existe:
C:\test dir>dir /b copyme.txt
copyme.txt
Tout d'abord j'appeler le script avec le nom du fichier comme argument que je veux copier:
C:\test dir>test.bat rename.txt
C:\test dir>for %f in ("C:\test dir\rename.txt") do @(
echo Copying "%f" to "C:\test dir\temp"
copy "%f" "C:\test dir\temp"
)
Copying ""C:\test dir\rename.txt"" to "C:\test dir\temp"
The system cannot find the file specified..
La commande de copie ci-dessus échoue, à cause des citations supplémentaires ...
Maintenant j'appeler le script avec le nom de fichier contenant un caractère générique *
:
C:\test dir>test.bat copyme.*
C:\test dir>for %f in ("C:\test dir\copyme.*") do (
echo Copying "%f" to "C:\test dir\temp"
copy "%f" "C:\test dir\temp"
)
C:\test dir>(
echo Copying "C:\test dir\copyme.txt" to "C:\test dir\temp"
copy "C:\test dir\copyme.txt" "C:\test dir\temp"
)
Copying "C:\test dir\copyme.txt" to "C:\test dir\temp"
1 file(s) copied.
Dans l'exemple ci-dessus, où im en utilisant un caractère générique, il fonctionne parfaitement bien.
Quelqu'un peut-il expliquer ce comportement? Pourquoi Windows ajoute-t-il des guillemets supplémentaires lorsque je n'utilise pas de caractères génériques? Ou est-ce en omettant les citations supplémentaires, parce que je suis en utilisant des caractères génériques? Je dois citer le chemin \ nom de fichier pour la boucle FOR
afin de gérer les chemins, qui contiennent des espaces, donc l'omettre n'est pas une option.