2011-06-24 91 views
13

Ben benim SVN depoları doğrulamak için aşağıdaki PowerShell komut dosyası: Bunu yürütmeye çalıştığınızda Fakat, benbir Space ile PowerShell CMD.EXE Call Nasıl Belirtilen Komutanlığı Dizin Adı

$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. 

aşağıdaki hata iletisi:

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. 

Ben esasen tek tırnak içinde çift tırnak ile $cmd = '"C:\Program Files (x86)\VisualSVN Server\bin\svnadmin" verify "C:\My Repositories\App1"'; ayarlıyorum beri, C alanı bekliyordum: \ Program Files (x86) \ ... doğru olarak geçilmek ly. Ben özlüyorum dizeyle önemsiz bir şey var sanıyorum

...

cevap

15

Böyle cmd.exe çağırmak gerekir:

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

Eğer cmd.exe göndermek komutları tamamen sarılmış olması gerekir kendi tırnaklarında, sadece bu komutların parçası olan boşluklarla değil. Bu, Powershell'in dizgiyi nasıl ayrıştırdığıyla ilgilidir ve literal tırnakları cmd.exe'a iletmek zorundadır, böylece sırayla çift tırnakların içeriğinin doğru şekilde ayrıştırılması gerekir. Bir cmd.exe oturumda zaten ve böyle bir değişkeni ayarlamak Örneğin

:

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

Sonra basitçe çalışacak komut o değişkeni genişleyen:

C:\>%_cmd% 

Ancak eğer Yeni bir cmd.exe oturumuna geçirerek, ayrıca şu ek alıntılara da ihtiyaç duyar:

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

cmd.exe/c "\' "$ _ cmd \' "" Bu hile yaptı! Teşekkürler! :-) –

+0

Bunu PowerShell'de çalıştıramadım. 'cmd.exe' sürekli olarak '' C: \ Program '' iç veya dış komut olarak tanınmadığından şikayetçidir ... '. PowerShell 5.1 çalıştırıyorum. Herhangi bir fikir? – STLDeveloper