Làm cách nào để trích xuất nhiều tài liệu lưu trữ được chứa trong các thư mục con trong một thư mục, đưa kết quả trở lại vào các thư mục lưu trữ.
Làm cách nào để trích xuất nhiều tài liệu lưu trữ được chứa trong các thư mục con trong một thư mục, đưa kết quả trở lại vào các thư mục lưu trữ.
Câu trả lời:
Đầu tiên, cài đặt 7-zip .
Tạo một bat
tệp trong thư mục gốc chứa nhiều thư mục con có lưu trữ bên trong. Sau đó dán các mục sau vào:
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
Khởi chạy dơi và tất cả các khóa / khóa của rar sẽ được trích xuất vào thư mục chứa trong đó.
Cái này hoạt động ra sao?
CHO / D / r %% F trong ("*") DO (
Cho vòng lặp để lặp qua tất cả các thư mục trong thư mục hiện tại và đặt đường dẫn vào một biến
%%F
.
%% CD%
Đặt thư mục hiện tại mà chúng ta đang ở trong bộ nhớ.
cd %% F
Đặt thư mục từ biến
%%F
là thư mục hiện tại.
FOR %%X in (*.rar *.zip) DO (
Đối với tất cả các tệp
rar
vàzip
trong thư mục hiện tại, hãy làm:
"C:\Program Files\7-zip\7z.exe" x "%%X"
Chạy 7-zip trên các tập tin. Báo giá là cần thiết xung quanh
%%X
vì một số tên tệp có khoảng trắng trong đó.
popd
Quay trở lại thư mục trước đó mà chúng ta đã lưu trước đó trong bộ nhớ.
Hy vọng điều này hữu ích cho ai đó.
Tôi gặp sự cố khi chạy tập lệnh từ Windows Vista. Khi tôi chạy mã không có gì xảy ra. Tôi cần phải là quản trị viên để có thể chạy tập lệnh. Khi tôi nhấp chuột phải vào tệp .bat và "chạy với tư cách quản trị viên", nó không hoạt động vì một số lý do bắt đầu trong thư mục system32 (nếu tôi nhớ chính xác). Để giải quyết vấn đề này, chỉ cần sử dụng biến Môi trường Windows (được giải thích tại đây: Biến môi trường Windows )% ~ dp0 để chuyển về thư mục mà tập lệnh được chạy từ đó.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x %%X
)
popd
)
Đảm bảo không có tệp * .rar hoặc * .zip nào ở cùng cấp độ với tập lệnh. Họ nên giảm một cấp.
Tôi hy vọng bình luận này đã giúp được ai đó.
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
Bắt đầu một tìm kiếm đệ quy tại thư mục hiện tại, tìm thấy tất cả các tệp kết thúc bằng .zip, sau đó chuyển nó thành một vòng lặp. Đối với mỗi tệp mà nó tìm thấy, nó chạy một lệnh giải nén trên tệp với đầu ra được chuyển đến thư mục của tệp.
Tuy nhiên, các câu trả lời ở trên hoạt động, nếu bạn đang chạy Windows 64-bit
và 7-Zip 32-bit
, đường dẫn chính xác là C:\Program Files (x86)\7-Zip
cho 7-Zip. Dưới đây là kịch bản làm việc cho tôi.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files (x86)\7-zip\7z.exe" x %%X
)
popd
)