Fichier de commandes variable avec les espaces et les parenthèses
J'ai lu de nombreux threads sur les différentes approches pour obtenir le fichier de commandes windows analyseur de traiter correctement les variables qui ont les espaces et les parenthèses, et d'autres caractères spéciaux, mais aucune des recommandations semble être en mesure de résoudre le problème que j'ai.
Voici le script (avant d'essayer toutes les solutions de contournement), dont l'objectif est de définir une valeur pour variable03 basé sur les valeurs trouvées pour variable01 et variable02:
set variable01="C:\Program Files (x86)\SomeProgram\Subfolder"
set variable02="${macro}"
set variable01=%variable01:"=%
set variable02=%variable02:"=%
set variable03=""
if %variable02:~0,1%==$ (
if %variable01:~0,1%==$ (
set variable03=%variable03:"=%
) else (
set variable03=-o '%variable01%'
)
)
...les valeurs de variable01 et variable02 ne sont pas connus à l'avance - ils sont remplacés par un autre programme avant d'exécuter le script, de sorte que le script ci-dessus montre un exemple de valeurs pour variable01 et variable02 après que la substitution a été faite.
L'erreur que j'obtiens lorsque ce script s'exécute est:
\SomeProgram\Subfolder' was unexpected at this time.
...ce qui correspond à la dernière 'set' ligne dans le script ci-dessus. Je suppose que cette erreur était due à l'parenthèses dans la valeur de variable01.
Si je change cette ligne:
set "variable03=-o '%variable01%'"
...puis j'ai cette erreur:
Files was unexpected at this time.
...ce qui semble indiquer qu'il est en train de marquer sur les espaces de variable01, et l'analyseur est toujours pas satisfait.
Si je puis ajoutez cette ligne au début du script:
setlocal enableextensions enableDelayedExpansion
...et variation %variable01% à !variable01!, J'obtiens toujours la même erreur.
Clairement, je ne comprends pas ce que le fichier de commandes de l'analyseur doit répondre à mon exigence que la valeur de variable03 a la valeur suivante:
-o 'C:\Program Files (x86)\SomeProgram\Subfolder'
...des suggestions?
OriginalL'auteur Hoobajoob | 2013-02-25
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est les parenthèses dans
variable01
'valeur. Depuis qu'il est en cours d'extension dans unif
condition, ces parenthèses sont interprétées comme le contrôle de flux. Corrigé par toujours le mettre entre guillemets doubles.Êtes-vous sûr? Je reçois le message d'erreur avec le code dans votre question, mais je ne l'obtiens pas avec mon code. Je viens de copier-collé ci-dessus dans mon bloc-notes et il a essayé d'être sûr que je n'ai pas une faute de frappe.
Remarque le les guillemets dans le
call :set3
ligne. Si vous utilisez des guillemets simples, vous obtiendrez l'erreur.Oui - la même erreur à l'aide de guillemets doubles. La version que j'ai posté est une version simplifiée de la vraie chose, mais, si c'est possible, j'ai autre chose à un gommage de votre proposition sera mise à jour si je trouve une différence significative. Merci encore!
Je peux obtenir que cela fonctionne en ajoutant des guillemets doubles autour de l'utilisation de variable01 dans le imbriqués si la ligne (la deuxième ligne du bloc if). Qui est: si "%variable01:~0,1%"=="$". Je pense qu'il y a peut-être pas un problème avec l'ensemble de la ligne en premier lieu.
OriginalL'auteur Nate Hekman
Que Nate a écrit, le problème dans ce cas sont les supports, mais le code complet est encore instable.
Il est toujours préférable d'utiliser expansion retardée, c'est sûr, à l'encontre de tous les caractères spéciaux.
Et vous devez utiliser la syntaxe étendue de
SET
set "variable=content"
pour encadrer l'expression complète de guillemets, c'est presque sûr, et les guillemets ne sont pas ajoutés au contenu.Et vous n'avez pas besoin de supprimer les guillemets plus tard.
Cela devrait fonctionner avec n'importe quel contenu dans var1 et var2
Il peut être dangereux, quand le contenu contient des citations en lui-même, comme
set "var=She said: "Dog & Cat" to me"
Mais dans ce cas, pour qu'un seul chemin il doit être sûrGotcha, merci pour la clarification.
OriginalL'auteur jeb