【问题标题】:Determine dynamic file name in Windows batch script?在 Windows 批处理脚本中确定动态文件名?
【发布时间】:2010-09-13 13:36:23
【问题描述】:

我们在固定目录中有一个文件,其名称为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 

【问题讨论】:

    标签: windows batch-file cmd zip 7zip


    【解决方案1】:

    使用奇妙的 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 的选项

    【讨论】:

    • 也许有一个两个多个问号和?只匹配单个字符(版本号很容易是多位数字)
    【解决方案2】:

    来源: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
    )
    

    如果您确实需要排除不遵循版本文件夹格式的数据库 zip(例如,如果有一个名为 database-old.zip 并且不应被提取的),那么您需要为该命令找到一个正则表达式匹配器Windows 中的行 - 这是可能的。那 - 或者 - 如果您将版本号保持在一位数,那么您可以使用 ? 单字符匹配。

    您可能还想添加一些检查(在7z... 行之前)以确保他的文件夹不存在,如果存在则做一些事情。

    【讨论】:

      【解决方案3】:
      powershell Expand-Archive x.x.x.zip "where_you_want_to_unzip"
      

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

      【讨论】:

        猜你喜欢
        • 2011-10-04
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多