2011-12-20 38 views
11

Tôi muốn viết một tập lệnh python sẽ tải lên bất kỳ tệp nào tôi chọn trong Windows Explorer. Ý tưởng là chọn bất kỳ tệp nào trong Windows Explorer, nhấp chuột phải để hiển thị Trình đơn Ngữ cảnh của tệp và chọn một lệnh từ đó ... giống như "Tải lên Máy chủ Web".Chạy tập lệnh Python trên tệp đã chọn

Sau khi lệnh được chọn, Python chạy tập lệnh nhận đường dẫn tệp và tên tệp sẽ được tải lên. Việc viết kịch bản Python sẽ tải tệp lên web có vẻ đơn giản. Điều không rõ là làm thế nào để tạo một thực thể trong Windows Context Menu cho Script Python. Và làm thế nào để vượt qua đường dẫn tập tin và tên tập tin vào kịch bản Python để bắt .... Xin vui lòng tư vấn cho!

Trả lời

21

Giả sử Windows 7, Nếu bạn mở một thư mục và nhập "shell: sendto" vào thanh địa chỉ thì nhấn enter bạn sẽ được đưa đến menu ngữ cảnh. Bạn có thể thêm tệp .cmd kèm theo thông tin sau.

@echo off 
cls 
python C:\Your\File\uploadscript.py %1 

Điều này sẽ thực thi tập lệnh python của bạn truyền vào tệp (% 1) làm tham số. Trong kịch bản python bạn có thể sử dụng:

import sys 
sys.argv #sys.argv[1] is the file to upload 

này được tất cả các thông số thông qua trong quá sys.argv[1] nên giúp bạn có được tập tin đó đã được thông qua trong tôi thử nghiệm này và nó hoạt động.. Lý do bạn cần tệp .cmd thay vì đi ngay đến tệp .py là vì tệp .py sẽ không hiển thị trong trình đơn Gửi Tới.

Thông tin thêm về việc các tập tin thông qua tại là ở đây:
Accepting File Argument in Python (from Send To context menu)

EDIT: Thêm đoạn mã để gọi điện trên nhiều file. Lưu ý điều này gọi kịch bản python trên mỗi tệp riêng lẻ, nếu bạn muốn gửi tất cả các tệp dưới dạng tham số tới tập lệnh python thì bạn sẽ cần phải thực hiện thêm một chút công việc. Bạn cần phải nghiên cứu hàng loạt kịch bản nếu bạn muốn làm những điều cao cấp hơn.

@echo off 
cls 
:upload_loop 
IF "%1"=="" GOTO completed 
    python C:\Your\File\uploadscript.py %1 
    SHIFT 
    GOTO upload_loop 
:completed 
+1

Làm cách nào bạn chuyển nhiều tệp cùng một lúc? Tôi chỉ có thể có được một người được thông qua. –

+0

Thêm phương thức ở trên sẽ hoạt động. Nếu bạn muốn làm điều đó trong một cuộc gọi duy nhất đến python thì bạn sẽ phải sử dụng các biến, điều này có thể được sử dụng: http://en.wikibooks.org/wiki/Windows_Batch_Scripting – Genzume

+0

@TristanForward Có lẽ chỉ cần sử dụng '% *' thay vì '% 1'. – binki

1

Trang web này Adding Windows context-menu actions có một tập lệnh python đẹp sẽ đăng ký menu ngữ cảnh để chuyển đường dẫn tệp đến tập lệnh python của bạn. Tôi đã không thử nhưng có vẻ dễ dàng để sửa đổi mẫu này cho những gì bạn cần làm. Plus, cách này nó là một cú nhấp chuột ít hơn so với giải pháp sendTo tôi đoán.

3

Thay vì %1 sử dụng %*.

%1 sẽ vượt qua trong các đối số đầu tiên, %* sẽ vượt qua tất cả (%n sẽ vượt qua trong các thứ n ...)

@echo off 
cls 
python C:\Your\File\uploadscript.py %* 

Lưu ý rằng các dòng lệnh đã được xây dựng trong character limits 2047 cho XP và các năm trước, 8191 cho các cửa sổ 7 và sau

2

để thêm những thứ như kịch bản python để menu chuột bối cảnh đúng, cũng có thể là thêm phím đăng ký (regedit) trong

\HKEY_CLASSES_ROOT\Directory\Background\shell 

Ở đó, thêm một vùng chứa, đặt tên cho nó là chuỗi bạn muốn xuất hiện trong menu ngữ cảnh. Trong đó, thêm một chìa khóa loại REG_SZ, trong đó có các phóng python script ví dụ

C:\Python27\python.exe "C:\path\to\your\script\yourscript.py" 

Tôi không biết làm thế nào để làm cho công việc mà với giải pháp aforementionned cho việc lựa chọn nhiều tập tin vào sys.argv, nhưng tôi nghĩ điều này cũng đáng được nhắc tới ở đây.

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