J'ai un script de traitement par lots qui doit effectuer une action sur chacun de ses arguments. Chaque argument est un nom de fichier (il n'y a pas de commutateur), et bien sûr les noms de fichiers peuvent contenir des espaces. Le script de traitement par lots est exécuté soit en faisant glisser des fichiers dans l'icône .bat dans l'Explorateur, soit en entrant les fichiers sur la ligne de commande, en incluant les arguments avec des espaces entre guillemets.Espaces dans les arguments de script par lots
Dans le script de traitement par lots, il existe des problèmes de gestion des arguments avec des espaces. Si j'utilise %*
comme suit, les citations sont ignorées et chaque 'mot' entre les espaces est traité comme un argument.
for %%x in (%*) do (
echo %%x
)
J'ai aussi essayé d'utiliser shift
, qui ne semble pas fonctionner soit à droite, l'étouffement des fichiers avec des espaces dans leur nom:
:next
if not %1 == "" (
echo %1
shift /1
goto next
)
Quel est le moyen idéal pour parcourir tous les arguments ?
Dans Bash, il suffit d'utiliser "[email protected]"
et tout fonctionne simplement ™, mais bien sûr cela ne semble pas être le cas avec les scripts batch Windows.
Odd; L'Explorateur ne semble pas citer les fichiers avec des virgules dans leur nom, donc le .bat a des problèmes. Ce script fonctionne exactement comme ma solution, sauf que je suppose que c'est un peu plus robuste. – strager
@strager J'ai mis à jour ma solution pour inclure une solution de rechange pour Explorer ne citant pas les noms de fichiers; , correctement. – sakra
Fonctionne bien; Merci! – strager