Par exemple, quelle est l'alternative à cette commande sans guillemets:
CD "c:\Documents and Settings"
La raison pour laquelle je ne souhaite pas utiliser de guillemets est que cette commande fonctionne:
SVN add mypathname\*.*
mais cette commande ne marche PAS:
SVN add "mypathname\*.*"
Le problème étant que lorsque je change de mypathname pour un chemin contenant des espaces, je dois tout citer. Par exemple:
SVN add "c:\Documents and Settings\username\svn\*.*"
Mais lorsque j'essaie, j'obtiens le message d'erreur suivant:
svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
Tout fonctionne presque pour moi, mais avez-vous peut-être essayé line5 .. échapper à 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 exemple ci-dessous où le curseur fait toute la différence.
On dirait d’en bas que le symbole caret pourrait ê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:\>
J'ai trouvé que mettre des guillemets autour d'une partie de l'emplacement fonctionne. Dans ton cas:
SVN add C:\"Documents and Settings"\username\svn\*.*
Bien que cela utilise des guillemets, il est important de noter que les astérisques sont en dehors de les guillemets, ils fonctionnent donc toujours correctement.
Malgré les réponses donnant l’illusion que cela fonctionne, le fait est que vous ne pouvez pas vous faufiler dans les arguments habituels de cmd. C'est facile à prouver:
Enregistrez "echo %1
" sous le nom test.bat
. Ce fichier de commandes affichera le premier argument que cmd nous transmet.
Maintenant, essayez et exécutez test.bat
, en définissant la valeur de %1
sur foo bar
. (Notez qu'il y a un caractère d'espace entre foo
et bar
.)
Essaie et erreur pendant quelques années et réalise que (il n'y a aucun moyen de le faire}. Les gens suggéreront d'échapper à l'aide de ^
, mais test.bat foo^ bar
ne produira pas foo bar
.
Donc, il n’ya aucun moyen d’obtenir la sortie foo bar
, et le plus proche que nous puissions obtenir est l’exécution de test.bat foo" "bar
qui produit foo" "bar
, ou de l’exécution test.bat "foo bar"
qui produit "foo bar"
.
Maintenant, la raison pour laquelle les autres réponses apparaissent pour fonctionner est que cd
effectue c'est-à-dire propre une analyse syntaxique supplémentaire, divergeant du comportement de transmission habituelle des arguments (les méthodes habituelles %1
, %2
, %3
et etc dans fichiers batch typiques).
Par exemple, considérons la commande particulière:
cd c:\documents and settings \some folder with spaces
Pourquoi ça marche? Ceci est dû à cd
lui-même faisant quelque chose d'équivalent à joindre les arguments 7 habituels en un seul. Selon les arguments de cmd qui passent les normes, nous voyons 7 arguments:
c:\documents
and
settings
\some
folder
with
spaces
C'est comme si cd
avait réuni les 7 arguments en un seul, en faisant quelque chose qui ressemble à array.join(" ")
, ce qui donne le chemin:
c:\documents and settings \some folder with spaces
Notez que ce comportement est propre à cd
uniquement) (et quelques autres fonctions). Cela n'a rien à voir avec les arguments habituels.
En effet, cd
a une autre particularité. Rappelez-vous que nous avons indiqué ci-dessus que nous ne pouvions pas obtenir le foo bar
de sortie? La sortie la plus proche que nous puissions obtenir est en exécutant:
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 présentent une similarité: ils produiront foo bar
après avoir coupé les caractères "
. L’auteur de cd
doit également s’être rendu compte de cela… si nous devons déduire de son comportement particulier que cd
adopte _ qui {élimine tout le "
qu’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
Le nom de fichier court semble fonctionner comme une brise.
"E:\Progra ~ 1\Java\Eclipse\eclipse.exe" -vmargs -Xms1024m -Xmx2048m
Pour booster la mémoire ..;)
Utilisez le nom de fichier court 8.3. Par exemple:
If exist c:\docume~1 goto :Ifoundthesucker
Pour parler du remplacement de la version 8.3, saviez-vous que deux choses:
Donc, c:\docume~1
peut pointer vers:
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 courant qu'ils n'existent pas.
Si vous voulez savoir si la version 8.3 existe pour un dossier/fichier particulier, testez-la avec paramenter/X avec une commande dir ... ou encapsulez-la dans un for pour obtenir uniquement cette partie, etc.
Pour en savoir plus sur l'activation/désactivation de la version 8.3 sur NTFS, voir M $ web: