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?

20
demandé sur laggingreflex 2012-08-10 03:11:11

4 réponses

Vous devriez être en mesure d'utiliser \"Ici est un site avec quelques autres caractères d'évasion que vous pourriez trouver utiles

Pour effectuer la chaîne de remplacer:

set temp=%1
set temp=%temp:"=\"%
echo %temp%
23
répondu nick 2012-08-10 00:02:13

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.

5
répondu Andrew Dennison 2014-03-05 04:40:43
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 pathmyPath. 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.

1
répondu laggingreflex 2012-08-10 19:34:09

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"
0
répondu Drarakel 2012-08-12 07:11:23