Використання пакетного файлу для zip-файлів як окремих ZIP-файлів


10

Тому я намагаюся використовувати 7zip у пакетному файлі, щоб взяти файли у папку та зафіксувати їх як окремі файли. Отже, перший файл отримує це власний zip-архів, а наступний і так далі. Я шукав в Інтернеті і спробував купу різних кодів. Поки що мені вдалося лише зафіксувати їх як один поштовий файл, і він виводиться на робочий стіл.

На жаль, я втратив код, який це зробив, і тепер я застряг у цьому, який, здається, нічого не робить.

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

Я хочу, щоб кожен файл мав власний zip-архів, а для zip-архіву було вказано ім'я файлу, за винятком розширення курсу.

Будь-яка допомога дуже вдячна.


Також якщо є простіший спосіб зробити це за допомогою вбудованої функції zip в Windows 10, це також буде добре.
Майк Ван Данк

Відповіді:


4

Я хочу, щоб кожен файл мав власний zip-архів, а для zip-архіву було вказано ім'я файлу, за винятком розширення курсу.

Пакетний сценарій

(Встановіть повний явний шлях до папки до джерела та пункту призначення, а потім просто запустіть у міру необхідності. Джерело - це те, де існують файли, які ви хочете скопіювати, а цільове місце призначення - це місце, де ви хочете, щоб ті, які переносяться на папір.)

@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

Командний рядок

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"

Подальші ресурси


4

Ваш оригінальний сценарій виконує наступні рядки за рядком:

@echo on

Показує командний рядок надрукувати назад кожну команду у пакетному файлі перед їх виконанням. Це просто так, щоб ви могли «побачити», що насправді робить, перш ніж це зробити.

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

C hanges D irectory в те , що я сподіваюся , що це шлях , по якому ви хочете заархівувати всі файли.

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

Параметр INтут є (C:\Users\MVD21\Desktop\test). Це призведе до того, що цикл "body" (дія за ключовим словом DO) буде виконаний рівно один раз , при цьому %iпараметр призначить значення C:\Users\MVD21\Desktop\test. Не дивно, що це не робить те, що ви хочете! Схоже, це дозволить зібрати весь каталог в єдиний .7z файл.

Якщо він нічого не робить , це, мабуть, тому, що не може знайти шлях 7z.exe. Якщо цього файлу немає в поточному каталозі ( testзгадуваному вище каталозі), він повинен бути в PATH%PATH%змінній оточення; спробуйте echo %PATH%в оболонці, щоб побачити, для чого він встановлений на даний момент). В іншому випадку вам доведеться скопіювати 7z.exeпоточний каталог або вказати абсолютний шлях до місця, де він знаходиться (наприклад, наприклад "C:\Program Files\7-zip\7z.exe" ...).

pause

Після закінчення сценарію це ключове слово просто сповіщає оболонку чекати, коли ви натиснете клавішу Enter або закрийте командний рядок, а не негайно виходити з нього.


Коли ви створюєте пакетний сценарій (або, власне, все, що стосується коду), слід припинити трактувати весь сценарій як монолітну папку для копіювання, яку ви не намагаєтесь зрозуміти, а замість цього розбийте свій розбийте на підрозділи, які ви можете розібрати окремо, а потім з'єднайте їх. Це дасть змогу самостійно вирішувати проблеми та створювати рішення замість того, щоб просити когось іншого зробити всю вашу роботу за вас. Дуже рекомендую.

У вашому випадку у вас є такі підскладові вашої проблеми:

  1. Ітераціювати (прокрутити) кожен файл, що міститься в заданій директорії.
  2. Для кожного заданого файлу помістіть його у .7z файл, за допомогою виклику 7zутиліти.

Шанси на те, що хтось вже знайде відповідь, яка вирішує вашу конкретну потребу, менша, ніж шанс на те, щоб знайти більш загальні твори окремо.

Це питання "Як зробити що-небудь до кожного файлу в каталозі в пакетному скрипті" вирішує половину вашої проблеми.

Відповідь полягає в тому, що ви тільки починаєте цю частину з цієї відповіді StackOverflow:

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

і змінити ту частину, де він щось робить ( echo %%f), щоб робити те, що ти хочеш робити . Я знаю, що вам потрібно змінити цю частину, тому що я проаналізував текст сценарію і зрозумів, що означає кожен символ і параметр, тому я можу міркувати про те, куди хочу вставити власний код.

Ось якийсь "повітряний код" (неперевірений!):

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

@echo onІ pauseвище твердження є хорошою практикою, так що ви можете залишити їх. І ви , ймовірно , хочете , щоб це cdзаяву теж, якщо файли знаходяться в цьому шляху.

То що ж це залишає від нас?

@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

Якщо ви відповісте "Це не працює!", Я НЕ Я вам допоможу. Якщо ви спробуєте це, і це не спрацює, ОБОВ'ЯЗКОВО сказати мені в коментарях таку інформацію:

  • Яке точне повідомлення про помилку ви отримуєте в командному рядку, коли ви запускаєте ці команди або поміщаєте їх у пакетний файл і запускаєте їх? Не скорочуйте; скопіюйте та вставте результат безпосередньо (розмістіть його на http://pastebin.com, якщо його багато).
  • Як ви думаєте, що повідомлення про помилку говорить вам про те, що проблема?
  • Де знаходиться ваша 7-поштова установка (шлях до файлу)?
  • Чи вказується розташування файлів вашої 7-zip установки в змісті PATHсередовища? (перевірте це, як було сказано вище, echo %PATH%у cmdпідказці.)

Я не думаю, що це працює, тому що у мене встановлений 7zip на іншому диску? Здається, це спрацює, якщо я виконаю CD "Location of 7zip", як у вихідній відповіді. Звичайно, це працює лише "іноді". Він працював, поки я не помістив ще одну ехо-заяву під нього, і тепер це не так. І так, я намагаюся зрозуміти більше про пакетні файли. Я намагався знайти словник пакетних команд чи чого не вивчати, щоб насправді це зрозуміти. Повірте, я скоріше зрозумію, І це буде працювати, а не просто працювати.
Майк Ван Данк

Я спробував ваше рішення, і я не можу сказати вам, що таке результат, тому що пакетний файл не працює взагалі. Вона відкривається ненадовго, коли вікно cmd просто блимає, а потім знову закривається. Так, у мене пауза. У мене встановлено 7zip і на моєму локальному накопичувачі, і на вторинному внутрішньому накопичувачі, але він, здається, не є частиною середовища середовища
Майк Ван Данк

Я дуже хотів би зрозуміти, але пошук Google не дуже допомагає. Наприклад, я не маю поняття, що це "dir / b" команда чи параметр чи що вона робить. Я знаю, що dir очевидно є каталогом, але я не знаю, що / b. Що я хотів би, щоб хтось пояснив, які параметри роблять, щоб я міг краще зрозуміти. Або якщо у когось є посилання на сайт, де вони переглядають подібні речі, що також було б корисно. Я гуглив 'dir / b у пакетному файлі і нічого не міг знайти. Я думаю, що / b має щось спільне з іменами файлів, але я не впевнений.
Майк Ван Данк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.