Comment utiliser des espaces dans l'invite de commandes?

198

Comment puis-je utiliser des espaces dans la ligne de commande Windows?

cmd /C C:\Program Files (x86)\WinRar\Rar.exe a D:\Hello 2\File.rar D:\Hello 2\*.*
faressoft
la source

Réponses:

271

Les guillemets simples ne feront pas l'affaire dans ce cas. Vous devez ajouter des guillemets autour de chaque chemin et également mettre toute la commande entre guillemets:

cmd /C ""C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*""
Sakra
la source
4
Oui, chaque chemin doit être placé entre guillemets. De plus, toute la commande devait être à nouveau entourée d'une autre paire de guillemets. Maintenant ça marche! Merci!
Se lever
@sakra ne fonctionne pas non plus pour moi. "" C: \ Program Files \ WinRAR \ WinRAR.exe "a "C: \ Veri Tabani yedekler \ Dedicated_Pokemon_Pets_DB_Backup_2014_7_10_7_2.rar" -ri1 -mt2 -M5 "C: \ Veri Tabani yedekler \ Dedicated_Pokemon_Pets_DB_Backup_2014_7_10_7_2.bak""
MonsterMMORPG
3
@MonsterMMORPG préfixe la ligne aveccmd /C
sakra
@sakra Je veux exclure le fichier dont le nom est avec des espaces CEEMEA & LATAM.doc. Que devrais-je faire? "C:\Program Files\WinRAR\rar" a -agmmddyy -x*CEEMEA & LATAM.doc ".rar"
Ibn e Ashiq
a fonctionné pour moi mais sans les guillemets extérieurs: "C: \ Program Files (x86) \ WinRar \ Rar.exe" a "D: \ Hello 2 \ File.rar" "D: \ Hello 2 \"
user1620090
84

Je viens de comprendre que pour un cas où le chemin implique l'utilisation de caractères d'espace blanc, par exemple, lorsque j'ai besoin d'accéder à l'application, xyzquel emplacement est:

C:\Program Files\ab cd\xyz.exe

Pour l'exécuter à partir de l'invite Windows cmd, vous devez utiliser

C:\"Program Files"\"ab cd"\xyz.exe

ou

"C:\Program Files\ab cd\xyz.exe"
Mithil D
la source
J'ai essayé cela mais ne semble pas fonctionner dans mon cas: python "" C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ sqs-poller \ node_modules \ map-checker \ python \ unit_test.py "-d" C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP \ #Test Case "-o" C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP \ #Test Case "-o2" C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP \ #Test Case \ testcase_results.csv "" -l "C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP "-restore". peut vous aider?
hafizan
24

Si les guillemets ne résolvent pas le problème, essayez par exemple

dir /X ~1 c:\

pour obtenir une liste d'autres noms de fichiers ou de répertoires. Exemple de sortie:

11/09/2014 12:54 AM             8,065  DEFAUL~1.XML Default Desktop Policy.xml
06/12/2014  03:49 PM    <DIR>          PROGRA~1     Program Files 
10/12/2014  12:46 AM    <DIR>          PROGRA~2     Program Files (x86)

Utilisez maintenant le nom de fichier ou de dossier court de 8 caractères dans la 5ème colonne, par exemple PROGRA ~ 1 ou DEFAUL ~ 1.XML, dans vos commandes. Par exemple:

set JAVA_HOME=c:\PROGRA~1\Java\jdk1.6.0_45 
rob2universe
la source
C'est le moyen le plus simple. Pas de guillemets doubles impliqués.
Dave Anderson
Savez-vous que le court 8.3 est une option NTFS et peut être désactivé? Ne comptez pas dessus.
Zan Lynx
11

Entourez les chemins contenant des espaces entre guillemets.

cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"
COUP
la source
Le problème réside alors dans la nature de la syntaxe des arguments Rar.exe. Vous ne l'utilisez peut-être pas correctement. Peut-être essayer "D:\Hello 2\"ou "D:\Hello 2"au lieu de "D:\Hello 2\*.*"?
JAB
cmd / C "C: \ Program Files (x86) \ WinRar \ Rar.exe" a D: \ Hello \ File.rar D: \ Hello *. * (Il n'y a pas d'espaces et cela fonctionne) mais comment gérer les espaces?
faressoft
@JAB si vous avez besoin d'exclure un fichier dont le nom contient des espaces comme CEEMEA & LATAM.doc. Que devrait-il être? "C:\Program Files\WinRAR\rar" a -x*CEEMEA & LATAM.doc ".rar"
Ibn e Ashiq
10

Essayez de fournir des chemins d'accès complexes entre guillemets (et incluez les extensions de fichier à la fin pour les fichiers.)

Pour les fichiers:

call "C:\example file.exe"

Pour l'annuaire:

cd "C:\Users\User Name\New Folder"

CMD interprète le texte entre guillemets doubles ("xyz") comme une chaîne et le texte entre guillemets simples ("xyz") comme une commande. Par exemple:

POUR %% A dans ('dir / b / s * .txt') do ('commande')

FOR %% A dans ('dir / b / s * .txt') do (echo "%% A")

Et une bonne chose, cmd n'est pas * sensible à la casse comme bash. Ainsi, "New fiLE.txt" et "new file.TXT" lui ressemblent.

* Remarque: les variables %% A dans la casse ci-dessus sont sensibles à la casse (%% A n'est pas égal à %% a).

Vaisak Mohan
la source
Les traits de soulignement dans les noms de fichiers comptent-ils? Comme 'file_name' vs 'file name'
SqueakyBeak
8

Je préfère inclure la commande dans ()laquelle est valide batchce qui le rend un peu plus facile à lire:

cmd /C ("C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*")
Dan
la source
3
set "CMD=C:\Program Files (x86)\PDFtk\bin\pdftk"
echo cmd /K ""%CMD%" %D% output trimmed.pdf"
start cmd /K ""%CMD%" %D% output trimmed.pdf"

cela a fonctionné pour moi dans un fichier batch

James Brown
la source
2

Ajoutez simplement un guillemet

Exemple: "C: \ Users \ User Name"

J'espère qu'il a été résolu!

Patrick Prakash
la source
7
La même chose a déjà été dite une demi-douzaine de fois. Quelle valeur supplémentaire cela ajoute-t-il?
JJJ
1

Vous devriez essayer d'utiliser des guillemets.

cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"
Jaanus
la source
2
Ce n'est pas fiable. Dans certains cas (voir microsoft.com/resources/documentation/windows/xp/all/proddocs/… - Traitement des guillemets), un fichier "C: \ Program.bat" est exécuté à la place.
Micha Wiedenmann
0

Espaces dans l'invite de recommandation (dans une ligne de code de commande VBA Shell)

J'ai eu un problème très similaire qui a fini par être un espace dans l'invite de commande lors de l'automatisation via VBA pour obtenir le contenu de la fenêtre de commande dans un fichier texte. Ce fil était l'un des nombreux que j'ai attrapés en cours de route et qui ne m'ont pas tout à fait apporté la solution.

Cela peut donc aider les autres à résoudre un problème similaire: comme la syntaxe avec des guillemets est toujours difficile à comprendre, je pense que montrer des exemples spécifiques est toujours utile. Le problème supplémentaire que vous rencontrez en utilisant l'invite de commande dans VBA via le shell, est que la ligne de code n'erreur souvent pas lorsque quelque chose ne va pas: en fait, un clin d'œil de la fenêtre de recommandation noire induit en erreur en pensant que quelque chose a été fait.

Par exemple ... disons que j'ai un dossier, avec un fichier texte comme à

C: \ Dossier Alans \ test1.txt ( https://imgur.com/FELSdB6 )

L'espace dans le nom du dossier donne le problème.

Quelque chose comme ça fonctionnerait, en supposant que le dossier, AlansFolder, existe

Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
 Shell "cmd.exe /c ""ipconfig /all > C:\AlansFolder\test1.txt"""
End Sub

Cela ne fonctionnera pas. (Ce ne sera pas une erreur).

Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
 Shell "cmd.exe /c ""ipconfig /all > C:\Alans Folder\test1.txt"""
End Sub

Inclure des paires de citations autour du chemin le fera fonctionner

Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
 Shell "cmd.exe /c ""ipconfig /all > ""C:\Alans Folder\test1.txt"""""
End Sub

(À propos, si le fichier texte n'existe pas, il sera créé).

Avec le recul, nous pouvons voir que ma solution se lie approximativement à certaines déjà données.

Conversion de cette ligne de code en une commande manuelle donnée que nous aurions

ipconfig /all > "C:\Alans Folder\test1.txt"

Cela semble fonctionner

Cela fonctionne aussi

ipconfig /all > C:\AlansFolder\test1.txt

Ce n'est pas

ipconfig /all > C:\Alans Folder\test1.txt

Cette forme finale fonctionne également et se lie avec la solution de sacra…. Vous devez ajouter des guillemets autour de chaque chemin et également mettre toute la commande entre guillemets “… ..

cmd.exe /c "ipconfig /all > "C:\Alans Folder\test1.txt""
Alan Elston
la source
-3

Il peut résoudre ce problème par cd commande , cette commande comprend les espaces sans guillemets et vous pouvez appeler n'importe quel programme de cette façon par exemple:

C: \ Windows \ system32> cd c: \ Program Files \ MongoDB \ Server \ 3.2 \ bin

c: \ Program Files \ MongoDB \ Server \ 3.2 \ bin> mongo now appel de l'invite de commande mongo.exe

Karen
la source