Làm cách nào để trích xuất tất cả tài liệu lưu trữ trong thư mục con của thư mục này?


18

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:


22

Đầu tiên, cài đặt 7-zip .

Tạo một battệ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 %%Flà thư mục hiện tại.

FOR %%X in (*.rar *.zip) DO (

Đối với tất cả các tệp rarziptrong 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 %%Xvì 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 đó.


3

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 đó.


Điều này làm việc tốt cho tôi. Tôi đã phải thay đổi đường dẫn thành "C: \ Program Files (x86)" từ "C: \ Program Files" khi tôi đang chạy 64-bit Win 7.
Contango

1
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.


1

Tuy nhiên, các câu trả lời ở trên hoạt động, nếu bạn đang chạy Windows 64-bit7-Zip 32-bit, đường dẫn chính xác là C:\Program Files (x86)\7-Zipcho 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
)

Tuy nhiên, nếu bạn có phiên bản 64 bit của 7zip, thì đường dẫn đúng là: "C: \ Program Files \ 7-zip \ 7z.exe" như đã nêu trong câu trả lời ban đầu.
Rohn Adams
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.