2017-09-28 4 views
0

J'ai un script PowerShell qui installe des éléments. Il est erroring où il essaie d'appeler un fichier .exe qui a un chemin avec un espace dans le nom:Erreurs PowerShell ou CMD sur l'espace dans le chemin du fichier

try 
{ 
    cmd /c "C:\Program Files\myfile.exe" -i "C:\myconfig.sql" 
} 

L'erreur qu'il fournit est:

« C: \ Program » est pas reconnu en tant que commande interne ou externe, programme exécutable ou fichier séquentiel.

Pourquoi est-il en train de trébucher sur l'espace dans le chemin du fichier lorsque j'ai joint le chemin entre guillemets?

+2

'cmd/c "C: \ Program Files \ monfichier.exe" -i "C: \ myconfig.sql"' -> 'et « C: \ Program Files \ myfile.exe "-i" C: \ myconfig.sql "' – BenH

Répondre

2

PowerShell bande citations externes, comme vous pouvez le voir here

C'est la même que la raison pour laquelle find.exe doesn't work as expected in PowerShell

Vous devez intégrer les guillemets à l'intérieur des guillemets simples ou échapper à la double citation à l'aide `backticks` ou en doublant le guillemet

  • cmd /c '"C:\Program Files\myfile.exe"' -i '"C:\myconfig.sql"'
  • cmd /c "`"C:\Program Files\myfile.exe`"" -i "`"C:\myconfig.sql`""
  • cmd /c "`"C:\Program Files\myfile.exe`"" -i `"C:\myconfig.sql`"
  • cmd /c """C:\Program Files\myfile.exe""" -i C:\myconfig.sql
  • ...

Vous pouvez également utiliser PowerShell 3.0's verbatim arguments symbol

cmd /c --% "C:\Program Files\myfile.exe" -i "C:\myconfig.sql" 

En savoir plus sur les règles citant dans PowerShell here


H Cependant, sauf si vous avez besoin d'un internal command de cmd comme dir, for ... vous devriez éviter d'appeler via cmd. Il suffit d'appeler le programme directement à partir de PowerShell

try 
{ 
    "C:\Program Files\myfile.exe" -i "C:\myconfig.sql" 
} 
+0

Test maintenant! – jdope

+0

Étrange, j'ai essayé la première suggestion de la vôtre, 'cmd/c '" C: \ Program Files \ monfichier.exe "' -i '" C: \ myconfig.sql "'' et a obtenu la même erreur ... – jdope

+0

Juste essayé avec des guillemets et a eu la même erreur – jdope