PowerShell komut dosyası kullanarak bir EXE dosyasını yürütme


112

PowerShell komut dosyası kullanarak bir EXE dosyası yürütmeye çalışıyorum. Komut satırını kullanırsam sorunsuz çalışır (önce çalıştırılabilir dosyanın adını ve onu çağırmak için parametre dizisini sağlarım):

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

Ancak aynı şeyi bir komut dosyasının içinde yapmak bir hata verir:

Terimi ' "C: \ Program Files \ Otomatik QA \ TestExecute 8 \ Bin \ TestExecute.exe" C: \ temp \ TestProject1.msi \ TestProject1.pjs / run / çıkış / SilentMode' bir cmdlet'inin adı olarak tanınmadı, işlev , komut dosyası dosyası veya çalıştırılabilir program. Adın yazılışını kontrol edin veya bir yol dahil edilmişse, yolun doğru olduğunu doğrulayın ve tekrar deneyin.

(Komutu "&" operatörünü kullanarak çalıştırdım.)

Bu sorunu nasıl çözebilirim?


4
Lütfen kodunuzu gönderin. Sorunun yattığı yer burası olduğundan, ona bakması tahmin etmekten çok daha kolaydır.
Cody Grey

Yanıtlar:


124
& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

veya

[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")

GÜNCELLEME: özür dilerim "(komutu" & "operatörünü kullanarak çalıştırdım)" cümlesini kaçırdım. Yolu dinamik olarak değerlendirirken bu problemi yaşadım. Invoke-Expression yapısını deneyin:

Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"

Asıl sorudaki komutun PS2.0'daki bir VM'de benim için neredeyse tam olarak işe yaraması garip. Ancak aynı komut şimdi PS4.0 sisteminde başarısız oluyor. İlginçtir ki, TestExecute'u da arıyorum. Sanırım en çok 2. seçeneği seviyorum, buna bir şans vereceğim, teşekkürler!
EJA

33

Görünüşe göre hem EXE hem de ilk argümanını tek bir dizede belirliyorsunuz örn; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Bu işe yaramayacak. Genel olarak, yolunda bir boşluk olan yerel bir komutu şu şekilde çağırırsınız:

& "c:\some path with spaces\foo.exe" <arguments go here>

Yani & ardından, bir komutu tanımlayan bir dizge gelmesi beklenir: cmdlet, işlev, yerel exe göreli veya mutlak yol.

Sadece bunu çalıştırdığınızda:

& "c:\some path with spaces\foo.exe"

Gerekirse argümanlardan alıntı yapmaya başlayın. Argümanlarınızın gayet iyi olması gerektiği gibi görünse de (boşluk yok, PowerShell tarafından yorumlanan başka özel karakter yok).


2
Komut dosyası ve exe aynı klasördeyse, powershell betiğini tam yol olmadan yürütmenin bir yolu var mı? Veya göreceli bir yol kullanmak mümkün mü?
guanome

7
Exe aynı klasördeyse, bunu yapabilirsiniz .\foo.exeve ayrıca göreceli bir yol ..\..\foo.exeve boşluklarla göreli bir yol da kullanabilirsiniz & '..\..\path with spaces\foo.exe'.
Keith Tepesi

Eğer varsa boruları sizin komuta Eğer tırnak kullanabilirsiniz gerekenden daha: cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\".
larkee

2

Powershell'de, .exe dosya konumuna cd. Örneğin:

cd C: \ Kullanıcılar \ Yöneticiler \ Karşıdan Yüklemeler

PS C: \ Kullanıcılar \ Yöneticiler \ İndirilenler> & '. \ Aaa.exe'

Yükleyici açılır ve ekrandaki talimatları izler.


tam olarak ne istiyorum! bir .exe dosyası çalıştırın & '. \ aaa.exe'
Sharif Yazdian

2
  1. $ args'ı klonla
  2. argümanlarınızı yeni diziye itin
  3. & $ path $ args

Demo:

$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()

$myArgs += '-p'
$myArgs += $env:NGINX_HOME

& $exepath $myArgs

Thx @nodoccat, çok uzun bir argüman listesiyle bir docker komutunu başlatmak için bir cazibe gibi çalıştı.
danidemi

1

Geliştirici olmamakla birlikte, bir satırda birden çok ps komutunu çalıştırmada bir çözüm buldum. Örneğin:

powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc

& (Ve işareti) 'nin önüne bir "(çift tırnak) koyarak çalıştırılabilir dosyayı çalıştırır. Örneklerin hiçbirinde bundan bahsedildiğini buldum. Çift tırnak olmadan ps istemi açılır ve giriş için bekler.


Merhaba RichardE. Cevabınızın biçimini iyileştirebilir misiniz? Düzenleme modunda, biçimlendirme yardımı sağlanır, ona bir göz atın.
Dorian Turba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.