Определить динамическое имя файла в пакетном скрипте DOS? - PullRequest
0 голосов
/ 13 сентября 2010

У нас есть один файл в фиксированном каталоге, который будет иметь имя database-xxxzip, где xxx - номер версии, который можно изменить.

Мы хотим создать пакетный скрипт, который разархивирует этот файл - мыможно использовать 7zip для распаковки файла из пакетного скрипта, но нам нужно иметь возможность передать имя файла в 7zip - как мы можем определить имя файла в пакетном скрипте, если имя файла не будет постоянным?

Обновление

Понял, я должен предоставить более подробную информацию .. Сценарий должен разархивировать архив и затем запустить файл муравья, который был в архиве:

"C:\Program Files\7-Zip\CommandLine\7za.exe" x %FILE%
ant -f %UNZIPPED_ARCHIVE_DIR%\db.xml 

Ответы [ 2 ]

0 голосов
/ 13 сентября 2010

Источник: extract.bat:

@echo off
::: extract.bat - Extract all database-*.zip files in the given folder
::: usage: extract.bat [folder]
:::     folder - Search for files here (defaults to current folder)

set search=database-*.zip /b
if "%~1" neq "" set search=%1\%search%

for /f "tokens=*" %%f in ('dir %search%') do (
  7z x %%f %%~nf
  ant -f %%~nf\db.xml
)

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

Вы также можете добавить некоторую проверку (перед строкой 7z...), чтобы убедиться, что его папка еще не существует, и что-то сделать, если она есть.

0 голосов
/ 13 сентября 2010

используйте фантастический цикл for

из командной строки

for /f "tokens=*" %f in ('dir database-?.?.?.?.zip /b') do 7za xxx %f

из командного файла

for /f "tokens=*" %%f in ('dir database-?.?.?.?.zip /b') do 7za xxx %%f

, где xxx - параметры, переданные в 7zip

...