Как я могу разархивировать новейший файл в каталоге в файле BAT? - PullRequest
3 голосов
/ 07 октября 2008

Я работаю над сборкой системы. Система сборки публикует результаты в виде zip-файла в каталоге. К сожалению, у меня нет простого способа узнать имя zip-файла, потому что он имеет временную метку. Для следующей операции я должен распаковать этот zip-файл в определенное место, а затем выполнить еще несколько файловых операций.

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

Как выполнить команду распаковки, которая будет действовать только для самого нового zip-файла в каталоге, игнорируя все остальные?

РЕДАКТИРОВАТЬ: я решил вместо этого использовать возможности ANT для этой задачи. Тем не менее, это все еще изящная уловка, чтобы иметь дело ... Спасибо за ответ!

Ответы [ 4 ]

10 голосов
/ 07 октября 2008

Это должно сделать это:

FOR /F usebackq %%i IN (`DIR /B /O-D *.ZIP`) DO UNZIP %%i && GOTO DONE || GOTO DONE
:DONE

Это работает следующим образом:

  • DIR /B /O-D *.ZIP перечисляет все ZIP-файлы в обратном порядке даты в «голом» формате, т.е. только в имени.
  • FOR /F usebackq используется для зацикливания вывода команды.
  • && GOTO DONE || GOTO DONE гарантирует, что UNZIP запускается только для первого файла. Вам нужны && (и) и || (или) на случай, если разархивирование по какой-либо причине завершится неудачей.

Вам нужно будет изменить UNZIP %%i на любую команду разархивирования, которую вы хотите использовать.

EDIT Выше будет работать до тех пор, пока имя файла Zip не содержит пробелов. Если вы хотите обрабатывать имена файлов с пробелами, используйте следующий вариант:

FOR /F "tokens=*" %%i IN ('DIR /B /O-D *.ZIP') DO UNZIP "%%i" && GOTO DONE || GOTO DONE
:DONE

Различия:

  • Опция "tokens = *" возвращает все имя файла, даже если оно содержит пробелы.

  • Имя файла, переданного в UNZIP, заключено в кавычки

  • В этом варианте для команды DIR используются одинарные кавычки, поэтому опция «usebackq» не требуется.

2 голосов
/ 07 октября 2008

Если Cygwin или другая Unix-подобная среда является альтернативой

unzip "$(ls -tr *zip | tail -n1)"

сделает это

0 голосов
/ 07 октября 2008

Я думаю, что вам понадобится 7-zip для сжатия / распаковки скриптов.

0 голосов
/ 07 октября 2008

Зачем использовать bat-файлы, когда у вас есть PowerShell или консольные приложения?

...