Поэтому я пытаюсь использовать 7zip в пакетном файле, чтобы взять файлы в папке и сжать их как отдельные файлы. Таким образом, первый файл получает свой собственный zip-архив, а следующий и так далее. Я искал в интернете и пробовал кучу разных кодов. До сих пор мне удалось только успешно заархивировать их как один 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-архив разделял имя файла, за исключением расширения, конечно.
Любая помощь с благодарностью.
Ответы:
Пакетный скрипт
(Установите полные явные пути к исходным и целевым папкам вверх, а затем просто запустите их по мере необходимости. В источнике находятся файлы, которые вы хотите заархивировать, а в месте назначения вы хотите, чтобы эти файлы были сжаты.)
Командная строка
Дополнительные ресурсы
источник
Ваш оригинальный скрипт делает следующее, строка за строкой:
@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)
. Это приведет к тому, что цикл «тело» (действие за ключевым словом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
Когда сценарий завершен, это ключевое слово просто говорит оболочке подождать, пока вы нажмете ввод или закроете командную строку вместо немедленного выхода из нее.
Когда вы создаете пакетный скрипт (или, действительно, все остальное, что связано с кодом), вы должны прекратить рассматривать весь скрипт как монолитную копию-вставку, которую вы не пытаетесь понять, и вместо этого разбить свой проблема в части, которые вы можете выяснить индивидуально, а затем соединить их. Это позволит вам самостоятельно решать проблемы и создавать решения, а не просить кого-то делать всю вашу работу за вас. Я очень рекомендую это.
В вашем случае у вас есть следующие подкомпоненты вашей проблемы:
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
утверждение также, если ваши файлы расположены по этому пути.Так что же это оставляет нас?
Если вы ответите «Это не работает!», Я НЕ БУДУ вам помочь. Если вы попробуете это, и это не сработает, вы ДОЛЖНЫ сообщить мне в комментариях следующую информацию:
PATH
переменной среды? (отметьте это, как указано выше, сecho %PATH%
помощьюcmd
подсказки.)источник