2010-03-23 34 views
5

Đi một tập tin batch excruciatingly đơn giản:Administrator vào tập tin batch với đôi thông số trích dẫn

echo hi 
pause 

Save rằng như test.bat. Bây giờ, thực hiện một phím tắt để test.bat. Phím tắt chạy tập tin batch, mà in "hi" và sau đó chờ đợi một phím bấm như mong đợi. Bây giờ, thêm một số đối số vào mục tiêu của phím tắt. Bây giờ bạn có một phím tắt để:

%path%\test.bat some args 

Phím tắt chạy tệp hàng loạt như trước đây.

Bây giờ, hãy chạy phím tắt dưới dạng quản trị viên. (Đây là trên Windows 7 bằng cách này.) Bạn có thể sử dụng hoặc nhấp chuột phải -> Chạy với tư cách Quản trị viên hoặc truy cập thuộc tính của phím tắt và chọn hộp trong phần nâng cao. Nói với UAC rằng điều đó là ổn và một lần nữa shortcut sẽ chạy file batch như mong đợi.

Bây giờ, thay đổi các đối số trong các mục tiêu của các phím tắt để thêm dấu ngoặc kép:

%path%\test.bat "some args" 

Bây giờ hãy thử các phím tắt as administrator. Nó không hoạt động lần này! Một cửa sổ lệnh bật lên và biến mất quá nhanh để thấy bất kỳ lỗi nào. Tôi đã thử thêm> test.log 2> & 1 vào lối tắt, nhưng không có nhật ký nào được tạo trong trường hợp này.

Thử chạy cùng một lối tắt (với dấu ngoặc kép) nhưng không phải là Quản trị viên. Nó chạy các tập tin batch tốt. Vì vậy, có vẻ như hành vi không phải do các tham số được trích dẫn kép, và nó không phải vì nó hoạt động như Quản trị viên. Đó là một sự kết hợp kỳ lạ giữa hai người.

Tôi cũng đã thử chạy cùng một lệnh từ cửa sổ lệnh của quản trị viên. Điều này chạy các tập tin thực thi như mong đợi mà không có lỗi. Chạy lối tắt từ cửa sổ lệnh sẽ sinh ra một cửa sổ lệnh mới mà đã lóe lên và biến mất. Vì vậy, rõ ràng vấn đề là do sự kết hợp của quản trị viên, phím tắt và dấu ngoặc kép.

Tôi hoàn toàn bối rối, có ai có ý tưởng gì đang xảy ra không? Tôi cũng muốn một cách giải quyết khác.

+0

điều gì xảy ra khi bạn chạy lệnh thực trên dòng lệnh. '% path% \ test.bat" một số args "'. Bạn đã thấy gì? – ghostdog74

+0

khi chạy từ dòng lệnh, tập tin batch in "hi" và sau đó chờ đợi một phím bấm, như bạn có thể mong đợi. – XXB

Trả lời

5

Tôi chỉ cần chạy Process Monitor về vấn đề này và đây là những gì tôi nhìn thấy:

Run as User:

cmd /c ""C:\Users\Sunbelt\Desktop\test.bat" "some args""

Run as Admin:

"C:\Windows\System32\cmd.exe" /C "C:\Users\Sunbelt\Desktop\test.bat" "some args"

Đối với một số lý do, Run như trường hợp quản trị không phải là trích dẫn toàn bộ lệnh. Dường như nó đang cố gắng chạy lệnh:

C:\Users\Sunbelt\Desktop\test.bat" "some args

tôi sẽ đoán rằng kể từ khi vũ trụ đầu tiên được trích dẫn nó thực sự cố gắng để chạy lệnh sau:

"C:\Users\Sunbelt\Desktop\test.bat some" args

Và trong Process Monitor ghi có một mục hệ thống tập tin của "NO SUCH FILE" cho "C: \ Users \ Sunbelt \ Desktop \ test.bat một số". Tôi không biết tại sao nó lại khác khi chạy với tư cách Quản trị viên, nhưng đó là những gì dường như đang xảy ra.

+0

thông tin tốt, nhưng tôi muốn có một số loại công việc xung quanh ... – XXB

+0

Tôi không thể tìm ra cách để làm điều đó. Tôi đã thử thêm dấu ngoặc kép ở tất cả các loại địa điểm, nhưng hộp thoại phím tắt sẽ không chấp nhận đầu vào đó hoặc kết quả là trong cùng một truy cập "KHÔNG CÓ SUẤT". – Luke

3

Để làm việc xung quanh này, tạo một file bat trên một con đường mà không có dấu, và với một tên tập tin mà không có dấu, mà chỉ đơn giản thực hiện điều này:

call "Long path to original bat file\Original bat file.bat" 

file bat thứ này có thể được chạy như admin.

Bây giờ bạn có thể tạo lối tắt cho tệp dơi phụ này và kiểm tra chạy với tư cách quản trị viên trong tùy chọn nâng cao của phím tắt. Các phím tắt có thể được đặt trên một con đường với không gian và nó có thể có một tên tập tin có chứa không gian.

0

Trong trường hợp của tôi, tôi chỉ muốn chuyển một tên tệp làm tham số, nhưng đường dẫn có dấu cách.

Tôi đã tìm thấy giải pháp phù hợp cho trường hợp này (nếu có thể cắt ngắn tên tệp).

Tạo một tệp dơi khác (input_gate.bat) để xóa dấu cách trong đường dẫn bằng cú pháp CALL.exe. Giả sử rằng các phím tắt được đặt tên test.lnk và đang trên con đường giống như input_gate.bat:

call %~sdp0test.lnk %~sf1 

Pass này như một tham số để test.bat tên tập tin đầy đủ dưới dạng ngắn, với quyền quản trị.

  • % ~ sdp0 -> Đường dẫn hiện tại (cho input_gate.bat) có định dạng ngắn hay không.
  • % ~ SF1 -> là tham số đầu tiên truyền cho input_gate.bat (trong trường hợp của tôi đầy đủ tên tập tin với không gian)
0

này làm việc cho tôi trong Windows 7:

ShortcutTarget: C:\Windows\System32\cmd.exe /C myscript.bat Param1 "Param Two with spaces" 
StartIn:  "C:\Path containing\my script" 

Không cố gắng nó là Admin. Tôi không nghĩ rằng nó sẽ hoạt động nếu myscript.bat chứa không gian

0

Cuối cùng tôi đã tìm ra, theo cách cho phép sử dụng tên tệp dài (tên tệp ngắn không phù hợp với trường hợp sử dụng của tôi). Giải pháp của tôi hoạt động trên Win 7, 8 và 10. Tôi nghĩ nó được lấy cảm hứng từ đề cập của Luke về câu trích dẫn còn thiếu.

Ở đây là:

1.) Đối với các phím tắt bạn tạo các tập tin batch, mà bạn thiết lập để chạy như admin, sử dụng dòng lệnh sau:

cmd /s /c ""path_to_batch_file" 

Lưu ý rằng có 2 ký tự ngoặc kép ở đầu lệnh và chỉ 1 ở cuối số, mặc dù có nên cũng thường là 2 ở cuối. Nhưng đó là mẹo để làm cho nó hoạt động!

2.) Trong tập tin thực thi của bạn, thêm phía sau ký tự hai quote mất tích:

set user_file=%1" 


Vậy là xong! Dưới đây là ví dụ để bạn thấy nó hoạt động:

1.) Trên màn hình của bạn, tạo "kiểm tra.dơi" với các nội dung sau đây:.

@echo off 
set user_file=%1" 
echo The file is: %user_file% 
pause 

3.) Tạo shortcut cho tập tin batch Đặt nó chạy như admin, và cung cấp cho nó dòng lệnh sau:

cmd /s /c ""%userprofile%\desktop\test.bat" 

4.) kéo một tập tin vào shortcut Success (tôi hy vọng ...)

Các vấn đề liên quan