Ваш оригінальний сценарій виконує наступні рядки за рядком:
@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 або закрийте командний рядок, а не негайно виходити з нього.
Коли ви створюєте пакетний сценарій (або, власне, все, що стосується коду), слід припинити трактувати весь сценарій як монолітну папку для копіювання, яку ви не намагаєтесь зрозуміти, а замість цього розбийте свій розбийте на підрозділи, які ви можете розібрати окремо, а потім з'єднайте їх. Це дасть змогу самостійно вирішувати проблеми та створювати рішення замість того, щоб просити когось іншого зробити всю вашу роботу за вас. Дуже рекомендую.
У вашому випадку у вас є такі підскладові вашої проблеми:
- Ітераціювати (прокрутити) кожен файл, що міститься в заданій директорії.
- Для кожного заданого файлу помістіть його у .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
підказці.)