批处理 7zip,将文件压缩到没有任何文件夹的存档中

Posted

技术标签:

【中文标题】批处理 7zip,将文件压缩到没有任何文件夹的存档中【英文标题】:Batch 7zip, Zip file into archive without any folders 【发布时间】:2019-02-27 03:34:56 【问题描述】:

我是批处理新手,目前正在练习创建自动化脚本。我现在被困住了。我希望 zip 文件仅包含 tm_user.data,但我的代码会将其存档为 Fame\tm_user.data。如果有人能帮我解决这个问题,我将不胜感激。

变量

set default_folder_name=Main Folder
set tm_folder_name=TM Folder
set local_dir=C:\%default_folder_name%
set tm_dir=%local_dir%\%tm_folder_name%

主体

set /p id="Enter ID: "
set d = "tm_user.data"

if exist "%tm_dir%\%id%\Fame\%d%" (
    "C:\Program Files\7-Zip\7z.exe" a -tzip "%tm_dir%\%id%\Fame\%id%_fame.zip" "%tm_dir%\%id%\Fame\%d%"
    echo Process completed...
    timeout 2
    start "launch folder" "%tm_dir%\%id%\Fame"
    exit
) else (
        echo Error: %d% not found, please try again later!!
        timeout 5
        exit
    )
)

【问题讨论】:

不要为变量分配引号。也不要在等号的两侧放置空格。 set d=tm_user.data ...或set "d=tm_user.data"(请参阅此处未成为值一部分的引号)... 【参考方案1】:

批处理文件的一些最佳实践。

    不要在SET 命令中的等号两侧放置空格。等号之前的空格成为变量名的一部分,等号之后的空格被分配给变量。 不要将引号分配给变量,但要使用引号将分配括起来以保护特殊字符并避免将尾随空格分配给变量的末尾。

我选择使用PUSHDPOPD 命令。 PUSHD 命令设置工作目录并将前一个目录存储在堆栈中。 POPD 命令返回到之前存储的目录。使用这种技术,您不必在 7zip 命令中指定路径。

@echo off
set "default_folder_name=Main Folder"
set "tm_folder_name=TM Folder"
set "local_dir=C:\%default_folder_name%"
set "tm_dir=%local_dir%\%tm_folder_name%"

set /p "id=Enter ID: "
set "d=tm_user.data"

if exist "%tm_dir%\%id%\Fame\%d%" (
    pushd "%tm_dir%\%id%\Fame"
    "C:\Program Files\7-Zip\7z.exe" a -tzip "%id%_fame.zip" "%d%"
    echo Process completed...
    timeout 2
    start .
    popd
    exit
) else (
    echo Error: %d% not found, please try again later!!
    timeout 5
    exit
)

【讨论】:

以上是关于批处理 7zip,将文件压缩到没有任何文件夹的存档中的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中解压缩包含多个文件和目录的 7zip 存档 [关闭]

使用 javascript 压缩文件 - 损坏的存档

如何在不将批处理文件复制到 c 中的 7zip 文件夹的情况下运行 7zip 批处理

使用 sharpcompress 创建一个 7zip 存档

在 Cordova 中解压缩多部分存档

自动 7zip 任务 - “无法打开文件作为存档”