Sử dụng tệp bó để nén tệp dưới dạng tệp zip riêng lẻ


10

Vì vậy, tôi đang cố gắng sử dụng 7zip trong một tệp bó để lấy các tệp trong một thư mục và nén chúng thành các tệp riêng lẻ. Vì vậy, tệp đầu tiên được lưu trữ zip riêng, và tiếp theo, v.v. Tôi đã tìm kiếm trên internet và thử một loạt các mã khác nhau. Cho đến nay tôi chỉ quản lý thành công để nén chúng thành một tệp zip duy nhất và nó xuất ra máy tính để bàn của tôi.

Thật không may, tôi đã mất mã đã làm điều đó và bây giờ tôi bị mắc kẹt với điều này dường như không làm gì cả.

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

Tôi muốn mỗi tệp có kho lưu trữ zip riêng và để kho lưu trữ zip chia sẻ tên của tệp, trừ phần mở rộng của khóa học.

Bất kỳ trợ giúp nào cũng được đánh giá rất cao.


Ngoài ra, nếu có cách dễ dàng hơn để làm điều này bằng tính năng zip dựng sẵn trên Windows 10 cũng sẽ ổn.
Mike Van Dunk

Câu trả lời:


4

Tôi muốn mỗi tệp có kho lưu trữ zip riêng và để kho lưu trữ zip chia sẻ tên của tệp, trừ phần mở rộng của khóa học.

Tập lệnh hàng loạt

(Đặt đường dẫn thư mục rõ ràng đầy đủ nguồn và đích lên trên cùng và sau đó chỉ cần chạy khi cần. Nguồn là nơi chứa các tệp bạn muốn nén và đích là nơi bạn muốn các tệp được nén.)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

Dòng lệnh

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

Tài nguyên khác


4

Kịch bản gốc của bạn thực hiện như sau, từng dòng một:

@echo on

Báo cho dấu nhắc lệnh in lại từng lệnh trong tệp bó trước khi thực hiện chúng. Đây chỉ là để bạn có thể "nhìn thấy" những gì nó thực sự làm trước khi nó thực hiện.

cd "C:\Users\MVD21\Desktop\test"

C treo D irectory vào những gì tôi hy vọng là đường dẫn mà bạn muốn nén tất cả các tệp.

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

Tham số INở đây là (C:\Users\MVD21\Desktop\test). Điều này sẽ khiến "thân" vòng lặp (hành động đằng sau từ khóa DO) được thực thi chính xác một lần , với %itham số được gán giá trị C:\Users\MVD21\Desktop\test. Không có gì ngạc nhiên khi điều này không làm những gì bạn muốn! Dường như điều này sẽ nén toàn bộ thư mục vào một tệp .7z.

Nếu nó không làm , có lẽ bởi vì nó không thể tìm thấy đường dẫn 7z.exe. Nếu tệp đó không có trong thư mục hiện tại (thư mục đó testđược đề cập ở trên), thì nó sẽ phải nằm trên PATH(trong %PATH%biến môi trường; thử echo %PATH%trong một vỏ để xem hiện tại nó được đặt thành gì). Nếu không, bạn phải sao chép 7z.exevào thư mục hiện tại hoặc chỉ định một đường dẫn tuyệt đối đến vị trí của nó (ví dụ như, chẳng hạn, "C:\Program Files\7-zip\7z.exe" ...).

pause

Khi đoạn script kết thúc, từ khóa này chỉ báo cho shell chờ bạn nhấn enter hoặc đóng dấu nhắc lệnh thay vì thoát nó ngay lập tức.


Khi bạn đang xây dựng một tập lệnh bó (hoặc, thực sự, bất kỳ điều gì khác liên quan đến mã), bạn nên ngừng coi toàn bộ tập lệnh là một bản sao dán nguyên khối mà bạn không (cố gắng) hiểu và thay vào đó phá vỡ vấn đề thành các phần phụ mà bạn có thể tìm ra riêng lẻ, sau đó nối chúng lại với nhau. Điều này sẽ cho phép bạn giải quyết vấn đề một cách độc lập và tạo ra giải pháp thay vì yêu cầu người khác làm tất cả công việc cho bạn. Tôi khuyên bạn nên nó.

Trong trường hợp của bạn, bạn có các thành phần phụ sau của vấn đề của mình:

  1. Lặp lại (lặp qua) mỗi tệp có trong một thư mục nhất định.
  2. Đối với mỗi tệp đã cho, đặt tệp đó vào tệp .7z bằng cách gọi 7ztiện ích.

Cơ hội để ai đó có câu trả lời ngoài đó đã giải quyết được nhu cầu cụ thể của bạn ít hơn cơ hội có thể tìm thấy những mảnh chung chung hơn.

Câu hỏi này, 'Cách làm một cái gì đó cho mỗi tệp trong một thư mục trong tập lệnh bó' giải quyết một nửa vấn đề của bạn.

Sức đẩy của câu trả lời là bạn chỉ cần bắt đầu với phần này từ câu trả lời StackOverflow đó:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

và thay đổi phần mà nó đang làm một cái gì đó (cái echo %%f) để làm những gì bạn muốn làm . Tôi biết rằng bạn cần thay đổi phần đó, vì tôi đã phân tích văn bản của tập lệnh và hiểu ý nghĩa của từng ký tự và tham số, vì vậy tôi có thể suy luận về nơi tôi muốn chèn mã của riêng mình.

Đây là một số "mã không khí" (chưa được kiểm tra!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

Các câu lệnh @echo onpausecâu trên là cách thực hành tốt, vì vậy bạn có thể để chúng vào. Và có lẽ bạn cũng muốn giữ cdcâu lệnh đó, nếu các tệp của bạn nằm trong đường dẫn đó.

Vì vậy, những gì mà rời bỏ chúng ta?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

Nếu bạn trả lời với "Nó không hoạt động!", Tôi sẽ không giúp bạn. Nếu bạn thử cách này và nó không hoạt động, bạn PHẢI cho tôi biết trong các nhận xét thông tin sau:

  • Thông báo lỗi chính xác nào bạn nhận được trong dấu nhắc lệnh khi bạn chạy các lệnh này hoặc đặt chúng trong một tệp bó và chạy chúng? Đừng viết tắt; sao chép và dán đầu ra trực tiếp (đặt nó trên http://pastebin.com nếu nó nhiều).
  • Bạn nghĩ thông báo lỗi cho bạn biết vấn đề là gì?
  • Cài đặt 7-zip của bạn nằm ở đâu (đường dẫn tệp)?
  • Vị trí tệp của cài đặt 7-zip của bạn có được bao gồm trong nội dung của PATHbiến môi trường không? (kiểm tra điều này, như đã đề cập ở trên, với echo %PATH%một cmddấu nhắc.)

Tôi không nghĩ rằng điều này đang hoạt động vì tôi đã cài đặt 7zip trên một ổ đĩa khác? Nó dường như hoạt động nếu tôi làm cd "Vị trí của 7zip" như trong câu trả lời ban đầu. Tất nhiên đó chỉ là hoạt động "đôi khi". Nó đã hoạt động cho đến khi tôi đặt một câu lệnh echo khác vào bên dưới và bây giờ thì không. Và vâng, tôi đang cố gắng để hiểu thêm về các tập tin bó. Tôi đã cố gắng tìm một bảng chú giải các lệnh bó hoặc những gì không nên học để tôi thực sự hiểu nó. Tin tôi đi Tôi thà hiểu VÀ làm cho nó hoạt động hơn là chỉ có nó hoạt động.
Mike Van Dunk

Tôi đã thử giải pháp của bạn và tôi không thể cho bạn biết đầu ra là gì vì tệp bó không chạy được. Nó mở ra một thời gian ngắn với cửa sổ cmd chỉ nhấp nháy và sau đó đóng lại. Vâng, tôi có tạm dừng ở đó. Tôi đã cài đặt 7zip trên cả ổ đĩa cục bộ và ổ đĩa thứ cấp, nhưng dường như nó không phải là một phần của môi trường đường dẫn
Mike Van Dunk

Tôi thực sự muốn hiểu nhưng tìm kiếm google không giúp được gì nhiều. Ví dụ, tôi không biết lệnh hoặc tham số "'dir / b" đó là gì hoặc nó đang làm gì. Tôi biết dir rõ ràng là một thư mục nhưng tôi không biết những gì / b. Những gì tôi muốn là cho ai đó giải thích những gì các tham số đang làm để tôi có thể hiểu rõ hơn. Hoặc nếu ai đó có một liên kết đến một trang web nơi họ đi qua loại điều này cũng sẽ hữu ích. Tôi đã googled 'dir / b trong một tệp bó và thực sự không thể tìm thấy bất cứ điều gì. Tôi nghĩ rằng / b có một cái gì đó làm với tên tệp nhưng tôi không chắc chắn.
Mike Van Dunk
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.