【问题标题】:7zip creating empty archives with batch file7zip 使用批处理文件创建空档案
【发布时间】:2020-06-23 09:01:22
【问题描述】:

我想将所有内容压缩到一个文件夹中,所有内容,但要压缩到单独命名的档案中。由于某种原因,互联网上的每个解决方案都只能压缩文件夹,或者根本无法工作。

目前,我有

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a -mx "%%X.zip" "%%X\"

我理解的意思

  • for = 启动循环
  • /d = 我不知道这是什么意思
  • %%X = 我不知道这是什么意思
  • in = 不确定,我认为是当前目录
  • (*) = 我不知道这是什么意思
  • do = 执行 "..." 中的下一件事
  • "C:\Program Files\7-Zip\7z.exe" = 我想做的事。
  • a = 添加到存档
  • -m9 = 最大压缩率
  • "%%X.zip" = 把它做成一个 zip 文件,虽然我还是不知道 %%X 是什么。
  • "%%X\" = 即使我知道“%%X\”是什么意思,我也不知道为什么会出现在这里。

我发现替换 %%X 会给存档一个名称,所以它似乎复制了目标对象的名称。

所以如果我猜的话,我认为/d 是“目标文件夹”,%%X 是名称。

所以

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a -mx "%%X.zip" "%%X\"

按照我的理解用英语说:对于当前目录中的每个文件夹名称,使用 7z 将其最大压缩成同名的 zip...除了我不知道用什么替换 /d 到使其目标文件而不是文件夹。并且针对特定的扩展程序会更好。

我尝试用谷歌搜索“/d in cmd 是什么意思”、“什么是%%X”等。我似乎在搜索中没有得到正确的结果,我想我太含糊了谷歌。

更新:

for %%i in (*) do "c:\Program Files\7-Zip\7z.exe" a -mx "%%i.zip" "%%i\*.*"

似乎为文件夹中的每个项目制作了一个 zip 文件,但实际上并未向其中添加任何文件。我尝试添加/f,但是当我这样做时它根本不起作用。

此外,我第一次发布此内容时,它已作为 Batch script loop 的副本关闭,这与我的问题几乎无关。是的,我有一个循环,是的,它解决了批处理循环,但是不,它并不能解决我的问题,因为我的问题不在于循环本身。或者如果它确实存在,我完全不知道为什么或如何。所以,请给我解释一下。我确实看到它说%%X 是变量的部分,但这只是意味着我认为 X 可以是我想要的任何东西,并且由于在我的更新中我指出了一个次要问题,我认为我遇到的问题是 7z 而不是 bat 文件。

【问题讨论】:

  • 在命令提示符窗口中输入for /? 并阅读输出文本...
  • 或输入help for 并在同一命令提示符下按回车键。他们中的任何一个都可以为您提供有关for 的信息以及它的使用情况。

标签: batch-file cmd archive 7zip


【解决方案1】:

for 命令一开始可能会让人很困惑,但是有很多视频和网站展示了如何使用它的示例。 首先尝试for /? 以查看内置帮助信息。

如果我正确理解您的要求,下面的代码应该是您所追求的。如果不是,那么这应该有助于您理解原则并根据您的需要进行调整。

for /F "tokens=*" %%a in ('DIR /A-D /B /ON "C:\Test Folder\"') do (
    echo Processing File: C:\Test Folder\%%a
    "C:\Program Files\7-Zip\7z.exe" a -mx1 -tzip "C:\Test Folder\%%a.zip" "C:\Test Folder\%%a"
    echo.
)
pause

现在让我们逐行浏览它...

for /F "tokens=*" %%a in ('DIR /A-D /B /ON "C:\Test Folder\"') do (

/F 告诉它使用files 而不是directories(/D)

in (' ') 包含查找文件名的命令。注意命令两端的' 标记...它们很重要。

%%a 表示in() 命令传递的文件名的每个值。

do ( ) 它应该如何处理它收到的每个 %%a 值。


现在我们开始执行查找文件名并作为%%a 传递到do () 部分的命令

('DIR /A-D /B /ON "C:\Test Folder\"')

您可以通过运行dir /?找到更多信息

/A-D 告诉它忽略目录...仅列出文件。

/B 只输出文件名而不是其他任何东西,比如大小,否则会混淆for 命令。

/ON 按字母顺序将文件名提供给do() 命令

"C:\Test Folder\" 包含我们要列出/执行操作的所有文件的文件夹。确保包含尾部斜杠。还要使用"" 标记,否则如果文件夹名称中有空格,它将不起作用。


向屏幕写入(回显)一条消息,显示它将要执行哪个文件。

echo Processing File: C:\Test Folder\%%a

您可以在https://sevenzip.osdn.jp/chm/cmdline/syntax.htm找到更多关于如何使用 7zip 命令行功能的信息

"C:\Program Files\7-Zip\7z.exe" a -mx1 -tzip "C:\Test Folder\%%a.zip" "C:\Test Folder\%%a"

"C:\Program Files\7-Zip\7z.exe"运行这个程序....并传递以下信息(参数/开关)

a 添加文件而不是解压等

-mx1 使用最快的压缩方法...但空间效率较低。

-tzip 使用ZIP 压缩格式

"C:\Test Folder\%%a.zip" 保存新的“zip”文件。 (%%a 将被替换为当前文件的名称......又名 ChuckNorris.mpg,最终将成为 ChuckNorris.mpg.zip)

"C:\Test Folder\%%a"这是您要压缩的实际文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多