2011-06-24 11 views
13

Mam następujący skrypt PowerShell do weryfikacji moich repozytoria SVN:Jak Call CMD.EXE z PowerShell z przestrzenią w określonym dowództwa katalog Nazwa

$SVNAdminDir = 'C:\Program Files (x86)\VisualSVN Server\bin'; 
$RepositoryDir = 'C:\My Repositories\App1'; 
$_cmd = "`"$SVNAdminDir`\svnadmin`" verify `"$RepositoryDir`""; 
Write-Host $_cmd; # Copying this into the command prompt runs without an issue... 
cmd.exe /c $_cmd; # It's when I try to execute the command from PS that I get the error. 

Ale gdy próbuję go uruchomić, jestem Otrzymuję następujący komunikat o błędzie:

cmd.exe : 'C:\Program' is not recognized as an internal or external command, 
At line:5 char:12 
+  cmd.exe <<<< /c $_cmd; 
    + CategoryInfo   : NotSpecified: ('C:\Program' is...ternal command,:String) [],  RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

operable program or batch file. 

Odkąd jestem w zasadzie ustawiania $cmd = '"C:\Program Files (x86)\VisualSVN Server\bin\svnadmin" verify "C:\My Repositories\App1"'; z cudzysłów wewnątrz pojedynczych cudzysłowów, spodziewałem przestrzeń w C: Program Files \ (x86) \ ... należy podać poprawnie ly.

podejrzewam coś jest trywialne z ciągiem że tęsknię ...

Odpowiedz

15

Trzeba zadzwonić cmd.exe tak:

cmd.exe /c "`"$_cmd`"" 

Polecenia wysyłane do cmd.exe muszą być całkowicie owinięte w swoich własnych cytatach, a nie tylko ścieżkach ze spacjami, które są częścią tych poleceń. Ma to związek z tym, jak funkcja Powershell analizuje ciąg znaków i musi przekazywać dosłowne cytaty do cmd.exe, aby z kolei poprawnie analizował treść podwójnych cudzysłowów.

Na przykład, jeśli były już w sesji cmd.exe i ustawić zmienną takiego:

C:\>set _cmd="C:\Program Files (x86)\VisualSVN Server\bin\svnadmin" verify "C:\My Repositories\App1" 

Wtedy po prostu rozszerzenie tej zmiennej w linii poleceń będzie działać:

C:\>%_cmd% 

Jednakże, jeśli przekazanie go do nowej sesji cmd.exe wymaga również dodatkowych kwotowań:

C:\>cmd.exe /c "%_cmd%" 
+0

cmd.exe/c "\" "$ _ cmd \" " To wystarczy! Dzięki! :-) –

+0

Nie udało mi się uruchomić tego w PowerShellu. 'cmd.exe' ciągle błędnie narzeka, że' 'C: \ Program 'nie jest rozpoznawany jako wewnętrzne lub zewnętrzne polecenie ...'. Używam PowerShell 5.1. Jakieś pomysły? – STLDeveloper

Powiązane problemy