Truyền các đối số dòng lệnh cho Windows Triệu Mở với


28

Tôi có một chương trình mở bằng một phím tắt cụ thể, nhưng phím tắt dường như gửi tham số đến ứng dụng. Nếu tôi truy cập trực tiếp vào thư mục đích và nhấp đúp chuột, nó không hoạt động. Tuy nhiên, nếu tôi sử dụng dòng lệnh và truyền vào một đối số nhất định, ứng dụng sẽ mở đúng.

Tôi muốn mở một số loại tệp nhất định bằng ứng dụng, nhưng ứng dụng phải có các tham số, nếu không nó sẽ không hoạt động. Có thể làm điều này loại?


Phiên bản Windows nào bạn đang sử dụng?
iglvzx

Tôi đang sử dụng Windows 7.
jtpereyda

1
Điều này có giải pháp tốt hơn: superuser.com/questions/136133/

Câu trả lời:


20

Gặp vấn đề tương tự như @jtpereyda và giải pháp từ @bobbymcr cũng không hiệu quả với tôi. Tôi đã cố gắng để có được tất cả các tham số dòng lệnh được truyền vào các tập lệnh node.js mà không cần node.exe trên lệnh.

Vấn đề là nếu bạn đã liên kết chương trình với phần mở rộng thông qua Open Withhộp thoại thì bạn sẽ tạo một liên kết ứng dụng, thay vì liên kết mở rộng tệp, giữa hai phần. Và các hiệp hội ứng dụng được ưu tiên.

Nếu bạn không chỉnh sửa sổ đăng ký, bạn có thể sửa đổi (Default)khóa theo đường dẫn sau:

HKEY_CLASSES_ROOT\Applications\node.exe\shell\open\command

Bạn nên thay thế node.exebằng ứng dụng bạn đang điều chỉnh.

Hoặc bạn chỉ có thể xóa HKEY_CLASSES_ROOT\Applicationshoàn toàn thư mục ứng dụng khỏi thư mục và ftypeliên kết của bạn sẽ bắt đầu hoạt động.

Hãy chắc chắn sử dụng %*nó sẽ vượt qua trong các đối số dòng lệnh không xác định còn lại hoặc không có gì cả. Nếu bạn làm như vậy, "%2" "%3" "%4" "%5"bạn sẽ nhận được 5 thông số chuỗi trống được truyền vào ứng dụng của mình khi bạn không chỉ định bất kỳ đối số dòng lệnh nào.

Cuối cùng, nếu bạn không ổn khi sửa đổi sổ đăng ký bằng tay thì bạn có thể sử dụng công cụ phần mềm miễn phí từ Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

Liên kết tệp sẽ xuất hiện ở đầu danh sách, không có bất kỳ văn bản nào trong cột mở rộng đầu tiên. Chỉ cần tìm tên của tệp thực thi trong danh sách và chọn nó để sửa đổi command linetrường cho opentên hành động.

Trên windows7, các thay đổi đã được phản ánh ngay lập tức mà không cần khởi động lại hoặc khởi động lại ứng dụng. Tuy nhiên, tiện ích Nirsoft có một tính năng "Làm mới máy tính để bàn" trên bất kỳ sửa đổi nào, do đó tôi tin rằng có thể Vista hoặc các phiên bản HĐH trước sẽ lưu trữ dữ liệu. Trong trường hợp đó, tiện ích sẽ là một lựa chọn tốt hơn, nếu không bạn có thể cần phải đăng xuất và đăng nhập để xem các thay đổi.


1
như một lưu ý: có vẻ như luôn luôn sử dụng% 1 để truyền tệp liên quan đến chương trình. trực tiếp sử dụng% * dường như không hoạt động. Ít nhất tôi đã gặp vấn đề với ".pl" - liên kết perl trên win 7 của tôi
vlad_tepesch

1
Tôi đã làm cho nó hoạt động bằng cách thử và lỗi, dẫn đến giá trị Dữ liệu sau: "C:\Program Files\nodejs\node.exe" "%1"%*LƯU Ý: %*giá trị KHÔNG nằm trong dấu ngoặc kép và không có khoảng cách giữa nó và dấu ngoặc kép trước đó.
Michael Paulukonis

Tôi cũng đã xóa khóa HKEY_CLASSES_ROOT\.ulawtrong regedit chỉ trong trường hợp .ulawphần mở rộng của các tệp tôi đang làm thủ tục.
Matt

Chúng ta có thể vượt qua các đối số (nói 'thử nghiệm') trong khi mở không?
Rõ ràng

Vui lòng thay đổi câu trả lời này để sửa đổi một cách rõ ràng "[HKLM | HKCU] \ Software \ Classes", tùy thuộc vào ngữ cảnh cài đặt. Đừng sửa đổi HKCR trực tiếp. Xem "những cân nhắc quan trọng" cho các loại tệp và HKEY_CLASSES_ROOTbài viết. Đó là một sự hiểu lầm có thể hiểu được do phần lớn tài liệu của Microsoft có trước quan điểm hợp nhất cho HKCR được giới thiệu vào khoảng năm 2000.
Eryk Sun

10

Bạn có thể làm điều này với assocftypetại dấu nhắc lệnh. Mở một dấu nhắc lệnh nâng cao và thử như sau:

ftype MyFileType = C: \ MyDir \ MyProgram.exe / arg1 / arg2 "% 1"
PGS .xyz = MyFileType

Điều này sẽ liên kết .xyzphần mở rộng với MyProgram.exevà sẽ truyền dòng lệnh /arg1 /arg2 [filename.xyz]đến chương trình để chạy nó.


1
Được chấp nhận vì đây dường như là câu trả lời đúng từ những gì tôi đã nghiên cứu. Tuy nhiên, quá trình này có vẻ không hiệu quả trên hệ thống tôi đang sử dụng. Tôi có thể sử dụng ftype và PGS để xác minh rằng các thay đổi đã trải qua, nhưng nó không ảnh hưởng đến chương trình được sử dụng để mở tệp. Có lẽ quá trình đã thay đổi trong Windows 7?
jtpereyda

Sử dụng câu trả lời của Marcus Pope làm cho nó hoạt động chính xác về phía tôi bằng Windows 7. Đã cố gắng phát .ulawtệp bằng soxcách sử dụng các đối số được xác định trước từ nó. Lưu ý rằng ngoài việc xóa ứng dụng cũ, tôi cũng xóa HKEY_CLASSES_ROOT\.ulawđịnh nghĩa loại tệp.
Matt

CMD assocftypelà các lệnh kế thừa. Họ chưa cập nhật để mở rộng cho các liên kết tệp được thêm vào trong Windows XP, 7 và 8. Họ chỉ sửa đổi liên kết tệp và khóa ProgId dưới khóa hệ thống "HKLM \ Software \ Classes". Họ không đọc hoặc sửa đổi cài đặt HKCU cho mỗi người dùng, được ưu tiên hoặc các khóa con mới hơn như "Ứng dụng" và "SystemFileAssociations" hoặc các khóa khả năng cho mỗi ứng dụng từ "Đăng ký ứng dụng". Họ cũng không đọc hoặc sửa đổi lựa chọn của người dùng trong "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts".
Eryk CN

3

Người đặt câu hỏi báo cáo câu trả lời hay nhất không thực sự hoạt động.

Tôi đã tìm ra nó cho XP, có thể áp dụng cho hệ điều hành sau này.

Tại dấu nhắc cmd bạn cần hai lệnh: assoc, ftype.

Hai cái này có thể hiển thị những gì được liên kết và sau đó chỉnh sửa liên kết nhưng có một sự thay đổi, các hướng dẫn MS dường như bị sai / không đầy đủ. Tôi đã được cảnh báo về điều này bằng cách nhận thấy một phong cách kết hợp không có giấy tờ bởi các ứng dụng kỳ cựu được biết đến, tại sao?

Ví dụ này cho phép nhiều đối số được truyền cho chương trình liên kết.

ftype name_of_assoc="C\blah\aprog.exe" "%1" "%*"

Không phải là một lỗi đánh máy "%1" "%*". Phần trăm sao sẽ không hoạt động nếu không có phần trăm trước .

Và nó đi vào hoạt động ngay lập tức, không yêu cầu phải đăng xuất, v.v.

Làm đúng sẽ vượt qua 3 để tranh luận []

myfile.wotsit file1 file2 file3

Không thực hiện được nhưng có vẻ như các trích dẫn bên ngoài sau đây sẽ vượt qua -m nếu chương trình cần cờ.

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"

Tôi không nghĩ rằng điều này là chính xác. Sử dụng dấu ngoặc kép quanh "% *" sẽ có danh sách các đối số được truyền dưới dạng một đối số. Ngoài ra, bạn đã bỏ lỡ dấu hai chấm sau ký tự ổ đĩa. Lệnh đúng phải là: ftype name_of_assoc = "C: \ blah \ aprog.exe" -m "% 1"% *
User0

Tôi đang sử dụng chương trình FilesTypeMan tuyệt vời và trong trường hợp này bạn cần %1 %* không có dấu ngoặc kép !!! cửa sổ chết tiệt
Jean-François Fabre

2

Tôi gặp vấn đề tương tự với phiên bản PSP cũ hơn với Windows7

Giải pháp này (thay đổi dòng lệnh shell \ open \ trong Registry) đã hoạt động NHƯNG phải có cú pháp "C: \ MyFolderName \ PSP.EXE"% 1 KHÔNG QUOTES AROUND% 1 nếu không điều này được hiểu là một hằng số


1
Tại sao các downvote? Câu trả lời này đã giúp tôi cuối cùng nhận được lệnh ngay!
ylka

CẢM ƠN BẠN - Tôi đã có những trích dẫn và nó không hoạt động
Fiona - myaccessible.website

1

Không phải là giải pháp tốt nhất nhưng dễ nhất là sử dụng một tệp bó.

Tạo một tập tin bat như thế và đặt chương trình mặc định của bạn cho nó để mở rộng tập tin của bạn. Và vâng, báo giá trống sau khi bắt đầu là cần thiết:

{tên ứng dụng} .bat

    start "" "{app path}" %1 /edit

Thí dụ:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit

1
Đây là giải pháp duy nhất phù hợp với tôi trên Windows 10. Nó giúp tôi khởi động Word 2013 với tùy chọn / w để có một phiên bản mới trên mỗi lần khởi chạy, cần sử dụng Word với máy tính để bàn ảo.
cha mẹ của tôi vào

0

Đây là một phần mở rộng dường như làm chính xác những gì bạn muốn. Tôi chưa bao giờ sử dụng nó trước đây, nhưng nó dường như nhận được đánh giá tốt. để lại một bình luận nếu có vấn đề.


-1

Tạo một phím tắt Windows và sử dụng mẫu sau:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1

2
Và làm thế nào để người dùng sử dụng điều này để mở một tập tin như xyz.jpg?
G-Man nói 'Phục hồi Monica'

Ông hỏi làm thế nào để thay đổi đăng ký để đạt được điều này.
cuộn
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.