Escape "double guillemets" dans les paramètres d'entrée de batch
je veux exécuter ce qui suit dans le script batch où il prend un argument (un chemin)
runas /user:abc "icacls %1 /grant Everyone:(F) /T"
mais l'argument %1
contient déjà un "
(parce que c'est un chemin, transmis par les menus de contexte Send To - je n'ai pas beaucoup de contrôle sur cela).
Ainsi, lorsque la commande s'exécute en script batch, elle s'exécute comme ceci:
runas /user:abc "icacls "c:folder" /grant Everyone:(F) /T"
il est donc évident que j'ai besoin d'échapper à la "
s créé par %1
. Comment puis-je effectuer la manipulation de chaîne sur %1
telle qu'elle a échappé à la citations?
4 réponses
Chaque réponse, couvre une partie de la réponse. En les combinant à l'aide de la barre oblique inverse et citation: \"
vous obtenez:
runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"
ou vous pouvez doubler (double) citations de leur échapper:
runas /user:abc "icacls ""%~1"" /grant Everyone:(F) /T"
comme note secondaire ^
est parfois utile pour échapper les caractères spéciaux tels que <
,|
,>
,||
,&&
et &
Par exemple:
echo ^|
mais c'est assez rare.
SET myPath=%1
SET myPath=%myPath:"=\"%
runas /user:abc "icacls %myPath% /grant Everyone:(F) /T"
Edit-le nom de la variable a été changé de path
myPath
. PATH est une variable de système réservée qui ne doit pas être utilisée pour autre chose que ce qu'elle était prévue.
Une recherche/remplacement n'est même pas nécessaire dans de tels cas. Il suffit de supprimer les citations originales de votre argument (avec %~1
) - alors vous pouvez ajouter à nouveau ce que vous voulez, par exemple les citations échappées. Dans votre exemple:
runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"