在DOS批处理脚本中确定动态文件名?

时间:2010-09-13 13:36:24

标签: batch-file zip dos 7zip

我们在固定目录中有一个文件名为database-x.x.x.zip,其中x.x.x是可以更改的版本号。

我们想要创建一个将解压缩此文件的批处理脚本 - 我们可以使用7zip从批处理脚本解压缩文件,但我们需要能够将文件名传递给7zip - 我们如何确定文件名一个批处理脚本,因为文件名不会是常量?

更新

已实现我应提供更多详细信息。脚本需要解压缩存档,然后运行存档中的ant文件:

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

3 个答案:

答案 0 :(得分:0)

使用梦幻般的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

答案 1 :(得分:0)

来源: 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并且不应该提取),那么您需要找到一个正则表达式匹配器Windows中的命令行 - 这是可能的。 - 或者 - 如果您将版本号保持为单个数字,则可以使用?单个字符匹配。

您可能还想添加一些检查(在7z...行之前)以确保其文件夹不存在并执行某些操作。

答案 2 :(得分:0)

powershell Expand-Archive x.x.x.zip "where_you_want_to_unzip"

如果您需要使用7zip解压缩,那么我无法帮助您通过批处理文件解压缩,我总是只使用它。