Question Comment échapper des espaces dans la ligne de commande dans Windows sans utiliser les guillemets?


Par exemple, quelle est l'alternative à cette commande sans guillemets:

CD "c:\Documents and Settings"

La raison pour laquelle je ne veux pas utiliser les guillemets est que cette commande fonctionne:

   SVN add mypathname\*.*

mais cette commande ne fonctionne PAS:

   SVN add "mypathname\*.*"

Le problème étant que lorsque je change de nom de fichier pour un chemin avec des espaces, je dois citer le tout. Par exemple:

SVN add "c:\Documents and Settings\username\svn\*.*"

Mais quand j'essaye ceci, je reçois le message d'erreur suivant:

svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found

73
2018-05-04 12:54


origine


vous vouliez dire que vous ne souhaitiez pas utiliser les guillemets. - Thomas
Pourquoi votre clé de guillemet est-elle cassée? :) - slhck
@slhck Ne vous inquiétez pas, ma clé de changement de vitesse et ma clé 2 sont parfaitement correctes! J'utilise une commande qui ne semble pas autoriser les caractères génériques quand ils apparaissent à l'intérieur des guillemets, c'est tout! - David
@MarkBooth et @WeltenWanderer ont bien essayé mais malheureusement cela ne fonctionne pas. Dans tous les 3 cas, je reçois un "svn: Erreur de résolution de cas de ....." - David
Avez-vous essayé l'ancien formatage 8.3 du nom (DOCUME ~ 1)? - Justin Pearce


Réponses:


Tout fonctionne presque pour moi, mais avez-vous peut-être essayé line5 .. échappant à l'espace avec un symbole caret (^)

1 C:\Documents and Settings\user>cd ..

2 C:\Documents and Settings>cd ..

3 C:\>cd Documents and Settings

4 C:\Documents and Settings>cd..

5 C:\>cd Documents^ and^ Settings

6 C:\Documents and Settings>cd..

7 C:\>cd C:\documents and settings

8 C:\Documents and Settings>cd..

9 C:\>

Ou par ex. ci-dessous où le caret fait vraiment toute la différence.

Regarde de dessous comme le symbole caret peut être votre réponse, voir la ligne 3 ci-dessous.

1 C:\>"c:\Documents and Settings\a.bat"
gaga

2 C:\>c:\Documents and Settings\a.bat
'c:\Documents' is not recognized as an internal or external command,
operable program or batch file.

3 C:\>c:\Documents^ and^ Settings\a.bat
gaga

C:\>

43
2018-05-04 16:59



comme subversion est un outil de programmeur, il peut être approprié pour SO. voici une question connexe stackoverflow.com/questions/757435/...       il se peut que vous utilisiez des guillemets ou un caret pour le placer dans svn, alors vous utilisez peut-être une barre oblique inverse avant chaque espace - barlop
Vous pouvez également essayer svn svg de cygwin, si curieux .. avec quelques-uns des exemples de réponses à cette question et voir si certaines d'entre elles ou des variantes fonctionnent pour vous. - barlop
Le symbole du caret répond directement à ma question et j'accepte votre réponse. Malheureusement, la commande SVN ne semble pas le reconnaître! Si je l'essaie, j'obtiens ce message d'erreur "svn 'C:' n'est pas une copie de travail". J'ai un autre moyen de contourner cela et de simplement "cd" dans le répertoire, puis d'exécuter la commande SVN une fois là. Je peux même enchaîner les deux commandes en une seule ligne en utilisant l'opérateur &&: cd "c: \ Documents and Settings \ nom_utilisateur \ svn" && SVN add *. * - David
dans l'exemple du CD, caret n'est pas nécessaire, le CD n'a pas besoin d'espace - barlop
@ Chinggis6 intéressant .. cela ne fonctionne pas non plus pour DIR. Copy et dir sont tous deux des commandes intégrées, mais c’est aussi le cas du CD. Bien copier et dir prendre un nom de fichier comme paramètre. Peut être intéressant de poser sur le forum - barlop


J'ai trouvé que le fait de mettre des citations sur une partie seulement de l'emplacement fonctionne. Dans ton cas:

SVN add C:\"Documents and Settings"\username\svn\*.*

Bien que cela utilise des guillemets, la chose importante à noter est que les astérisques sont à l'extérieur les guillemets, afin qu'ils fonctionnent toujours correctement.


31
2018-04-24 07:45



aussi, si l'on veut être minimaliste, on peut faire des citations autour de l'espace ou seulement des caractères contenant l'espace, par ex. C: \> cd documents "et se" ttings - barlop
Merci beaucoup. J'ai peut-être voté 4 ou 5 fois si possible. - Sayka
@Sayka La question a demandé "Comment puis-je échapper des espaces en ligne de commande dans Windows sans utiliser les guillemets?" - barlop
@barlop Bien sûr, mais la raison de l'absence de guillemets est que l'astérisque ne fait pas son travail lorsqu'il est placé entre guillemets. La solution que j'ai donnée évite ce problème car les astérisques sont en dehors des guillemets. Cette réponse ne respecte pas les lettre de la question, mais il se conforme à la esprit de la question (c’est-à-dire qu’elle fonctionne dans le but prévu). - Kit Johnson


Malgré les réponses donnant l’illusion que cela fonctionne, le fait est que vous ne pouvez pas introduire des espaces dans des arguments de cmd habituels. C'est facile à prouver:

  1. Sauvegarder "echo %1"comme test.bat. Ce fichier de commandes affichera le premier argument que cmd nous transmet.

  2. Maintenant, essayez de courir test.bat, fixant la valeur de %1 à foo bar. (Notez qu'il y a un espace entre foo et bar.)

  3. Essai et erreur pendant quelques années et se rendre compte que il n'y a aucun moyen de le faire. Les gens vont suggérer de s'échapper en utilisant ^, encore test.bat foo^ bar ne produira pas foo bar.

Donc, il n'y a aucun moyen d'obtenir la sortie foo bar, et le plus proche que nous pouvons obtenir est en cours d'exécution test.bat foo" "bar qui produit foo" "bar, ou en cours d'exécution test.bat "foo bar" qui produit "foo bar".


Maintenant, la raison pour laquelle les autres réponses apparaître pour travailler est parce que cd Est-ce que sa propre analyse supplémentaire, divergeant du comportement des arguments habituels %1, %2, %3 et etc dans des fichiers de commandes typiques).

Par exemple, considérons la commande particulière:

cd c:\documents and settings \some folder with spaces

Pourquoi ça marche? Cela est dû à cd  lui-même faire quelque chose d'équivalent de rejoindre le 7 habituel arguments en un seul logique. Selon l'argument de passage des normes de cmd, on voit 7 arguments:

  1. c:\documents
  2. and
  3. settings
  4. \some
  5. folder
  6. with
  7. spaces

C'est comme si cd a rejoint tous les 7 arguments en un seul, faisant quelque chose de semblable à array.join(" "), qui produit le chemin:

c:\documents and settings \some folder with spaces

Notez que ce comportement est particulier à cd seulement (et quelques autres fonctions). Cela n'a rien à voir avec les arguments habituels.


Effectivement, cd a une autre particularité. Rappelez-vous que nous avons déclaré ci-dessus que nous ne pouvions pas obtenir la sortie foo bar? La sortie la plus proche que nous pouvons obtenir est en cours d'exécution:

test.bat foo" "bar

qui produit foo" "bar, ou:

test.bat "foo bar"

qui produit "foo bar", ou:

test.bat "foo "bar

qui produit "foo "bar, ou:

test.bat foo" bar"

qui produit foo" bar", ou:

test.bat "foo b"ar

qui produit "foo b"ar, ou:

test.bat fo"o bar"

qui produit fo"o bar", ou:

test.bat fo"o ba"r

qui produit fo"o ba"r, ou:

test.bat "fo"o" bar"

qui produit "fo"o" bar", ou:

test.bat "f""o""o"" ""b""a""r":

qui produit "f""o""o"" ""b""a""r", ou même:

test.bat """"f"""o""""o"" ""ba"""r"""""""""":

qui produit """"f"""o""""o"" ""ba"""r"""""""""".

Tous les exemples ci-dessus ont une similarité: ils produiront foo bar après avoir coupé le " caractères. cdL’auteur de ce livre a dû se rendre compte de cela aussi si nous devions en déduire cdcomportement particulier qui coupe tout " il reçoit, permettant à toutes ces commandes de fonctionner:

  • cd c:\documents and settings

  • cd "c:\documents and settings"

  • cd "c:"\"documents and settings"

  • cd c:\"documents" "and" "settings"

  • cd c:\"docu"ments an"d set"tings"

  • cd c:"\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs

  • cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs


22
2017-08-26 02:01



Qu'est-ce qu'une programmation par lot de fenêtres de désordre ... - PreservedFruit
Merci. Peut-on déterminer si le CD utilise argv[] ou GetCommandLine() ? pastebin.com/raw/t55iv0JS - barlop


Le nom de fichier abrégé semble fonctionner comme une brise.

"E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m

Pour booster la mémoire ..;)


7
2018-04-19 07:51



il peut ne pas fonctionner si le nom de fichier court a été désactivé - phuclv


Utilisez le nom de fichier court 8.3. Par exemple:

If exist c:\docume~1 goto :Ifoundthesucker

3
2017-10-03 14:47



Voir le commentaire de Lưu Vĩnh Phúc à La réponse de Milorulez. - Gerold Broser


Pour ceux qui parlent de remplacement 8.3, saviez-vous ces deux choses:

  • 8.3 peut être défini sur désactivé (ou activé) sur NTFS afin qu'il ne puisse pas toujours exister
  • 8.3 nom d'un fichier / dossier peut changer sans être notifié juste en créant, en renommant ou en supprimant d'autres choses sur le même dossier

Alors c:\docume~1 peut indiquer:

  • Non où (être invalide)
  • Le dossier que vous voulez
  • Un autre dossier
  • Un dossier variable au fil du temps

Ce n'est pas sûr, à moins d'obtenir le nom abrégé et de l'utiliser dans des opérations atomiques.

Cela dit, il est très rare qu'ils changent, mais il est très fréquent qu'ils n'existent pas.

Si vous voulez savoir si 8.3 existe pour un dossier / fichier particulier, testez-le avec paramenter / X sur une commande dir ... ou encapsulez-le sur pour obtenir uniquement cette partie, etc.

Si vous voulez plus d'informations sur l'activation / désactivation de 8.3 sur NTFS, consultez M $ web:

https://support.microsoft.com/es-es/help/121007/how-to-disable-8.3-file-name-creation-on-ntfs-partitions


1
2018-05-12 08:43