-1
votes

Comment appelez-vous un fichier de commandes avec un argument comportant des citations, à l'aide du système ()

Par exemple, dans la ligne de commande, cela fonctionne (le 1er argument contient des citations, mais le 2e argument ne le fait pas): "Test.bat" "a" b c'est-il savoir que "A" est le 1er argument et B est le deuxième

mais à l'aide du système (), cela ne fonctionne pas: Système ("Test.bat" "A" B)

Cela ne fonctionne pas non plus: système ("test.bat" \ "a \" b)


1 commentaires

Nous aimerions aider. Veuillez vous reporter à Comment créer un exemple minimal, complet et vérifiable


3 Réponses :


-3
votes

J'ai trouvé la réponse: système ("Test.bat" "" A "" B);

ou plus précisément: système ("\" test.bat \ "" "" A "" B ");

La réponse est donc d'échapper aux devis avec une double citation


1 commentaires

Doubles citations n'échappent rien. "a" "b" est identique que "a" "b" identique que "ab" car espace blanc concaténé.



1
votes

Cela va être la plus simple si nous utilisons un littéral à chaîne brut. Un littéral à chaîne brut est une façon d'écrire une chaîne en C ++ où rien ne s'échappe. Regardons un exemple: xxx pré>

le r code> au début indique qu'il s'agit d'un littéral à chaîne brut, et si vous appelez système (myCommand) Code>, il sera exactement équivalent à taper p> xxx pré>

dans la ligne de commande. Maintenant, supposons que vous souhaitiez échapper aux citations de la ligne de commande: p> xxx pré>

avec un littéral à chaîne brut, c'est simple: p>

string d = R"x(Hello)x";      // d == "Hello"


2 commentaires

Cela ne fonctionne pas pour moi, par exemple: "c: \ to effacer \ test.bat" b "" A "fonctionne dans la ligne de commande, mais système (r" ("c: \ to effacer \ test.bat" " un B)"); ne fonctionne pas. Notez que le système (r »(« c: \ to effacer \ test.bat »a b)"); travaille mais ce n'est pas ce que je veux, et le système (r "(" c: \ to effacer \ test.bat "\" a \ "b)"); ne fonctionne pas non plus.


Pourriez-vous mettre à jour votre question pour inclure la commande exacte que vous souhaitez exécuter à partir de la commande Commandline, ainsi que le message d'erreur que cela vous donne? (Si cela vous en donne un?)



0
votes

Je l'ai eu pour travailler maintenant:

system(R"(C:\"to erase\test.bat" "a")");


0 commentaires