Thực thi tệp EXE bằng tập lệnh PowerShell


111

Tôi đang cố gắng thực thi tệp EXE bằng tập lệnh PowerShell. Nếu tôi sử dụng dòng lệnh, nó hoạt động mà không có vấn đề gì (trước tiên tôi cung cấp tên của tệp thực thi và chuỗi các tham số để gọi nó):

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

Nhưng thực hiện chính xác điều tương tự bên trong tập lệnh sẽ trả về lỗi:

Thuật ngữ '"C: \ Program Files \ Automated QA \ TestExecute 8 \ Bin \ TestExecute.exe" C: \ temp \ TestProject1 \ TestProject1.pjs / run / exit / SilentMode' không được nhận dạng là tên của lệnh ghép ngắn, hàm , tệp kịch bản hoặc chương trình có thể hoạt động. Kiểm tra chính tả của tên hoặc nếu một đường dẫn được bao gồm, hãy xác minh rằng đường dẫn đó chính xác và thử lại.

(Tôi đã gọi lệnh bằng toán tử "&".)

Làm cách nào để khắc phục sự cố này?


4
Hãy đăng mã của bạn. Vì đó là vấn đề nằm ở đâu nên việc xem xét nó sẽ dễ dàng hơn nhiều so với việc đoán.
Cody Grey

Câu trả lời:


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

hoặc là

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

CẬP NHẬT: xin lỗi tôi đã bỏ lỡ "(Tôi đã gọi lệnh bằng cách sử dụng câu" & ")". Tôi gặp sự cố này khi đánh giá động đường dẫn. Thử xây dựng Biểu thức gọi:

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

Kỳ lạ là lệnh trong câu hỏi ban đầu, gần như chính xác, hoạt động đối với tôi trên máy ảo trong PS2.0. Nhưng lệnh tương tự hiện không thành công trên hệ thống PS4.0. Thật thú vị, tôi cũng đang gọi TestExecute. Tôi nghĩ tôi thích phương án 2 nhất, tôi sẽ thử, cảm ơn!
EJA

33

Có vẻ như bạn đang chỉ định cả EXE và đối số đầu tiên của nó trong một chuỗi đơn, ví dụ; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Điều này sẽ không hoạt động. Nói chung, bạn gọi một lệnh gốc có khoảng trống trong đường dẫn của nó như sau:

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

Điều đó &dự kiến ​​sẽ được theo sau bởi một chuỗi xác định một lệnh: lệnh ghép ngắn, hàm, tương đối gốc exe hoặc đường dẫn tuyệt đối.

Sau khi bạn làm việc này:

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

Bắt đầu làm việc với việc trích dẫn các đối số nếu cần. Mặc dù có vẻ như các đối số của bạn sẽ ổn (không có khoảng trắng, không có ký tự đặc biệt nào khác được PowerShell giải thích).


2
Có cách nào để thực thi tập lệnh powershell mà không có đường dẫn đầy đủ không, nếu tập lệnh và exe nằm trong cùng một thư mục? Hoặc là có thể sử dụng một con đường tương đối?
guanome

7
Nếu exe nằm trong cùng một thư mục thì bạn có thể thực hiện việc này .\foo.exevà bạn cũng có thể sử dụng một đường dẫn tương đối ..\..\foo.exevà một đường dẫn tương đối có dấu cách & '..\..\path with spaces\foo.exe'.
Keith Hill

Khi bạn đã có đường ống trong lệnh của bạn hơn bạn nên sử dụng dấu ngoặc kép: cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\".
Larkee

2

Trong Powershell, cd đến vị trí tệp .exe. Ví dụ:

cd C: \ Users \ Administrators \ Downloads

PS C: \ Users \ Administrators \ Downloads> & '. \ Aaa.exe'

Trình cài đặt bật lên và làm theo hướng dẫn trên màn hình.


chính xác những gì tôi muốn! chạy tệp .exe & '. \ aaa.exe'
Sharif Yazdian

2
  1. nhân bản $ args
  2. đẩy args của bạn trong mảng mới
  3. & $ path $ args

Bản giới thiệu:

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

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

& $exepath $myArgs

Thx @nodoccat, hoạt động giống như một sự quyến rũ để khởi chạy lệnh docker với một danh sách các đối số rất dài.
danidemi

1

Không phải là một nhà phát triển, tôi đã tìm thấy một giải pháp trong việc chạy nhiều lệnh ps trong một dòng. Ví dụ:

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

Bằng cách đặt một dấu "(dấu ngoặc kép) trước & (dấu và), nó sẽ thực thi tệp thực thi. Không có ví dụ nào tôi thấy điều này được đề cập đến. Nếu không có dấu ngoặc kép, dấu nhắc ps sẽ mở ra và chờ đầu vào.


Xin chào RichardE. Bạn có thể cải thiện định dạng câu trả lời của mình không? Trong chế độ chỉnh sửa, trợ giúp định dạng được cung cấp, hãy xem nó.
Dorian Turba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.