batch-file - 7zip 使用批处理文件创建空文件

标签 batch-file cmd archive 7zip

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

目前,我有

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 使它的目标文件而不是文件夹。定位特定的扩展会更好。

我尝试用谷歌搜索“cmd 中的/d 是什么意思”、“%%X 是什么意思”等。我似乎没有弄对搜索结果,我想我对谷歌来说太模糊了。

更新:

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

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

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

最佳答案

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 告诉它使用文件而不是目录(/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" 这是您要压缩的实际文件。

关于batch-file - 7zip 使用批处理文件创建空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60634995/

相关文章:

Powershell:如何在分配变量时摆脱 CMD 输出(nslookup)

使用感叹号的 Windows 批处理文件语法

Windows 期望从 Python 返回值

python - 如何启动前面有句点的文件?

archive - 如何在不包含目录本身的情况下压缩文件和文件夹的目录?

compression - 用一个命令创建 tar.xz

android - 无法在 flutter 中提取 zipper

windows - 编辑Windows注册表时(如果需要)可使用哪个注册表编辑器版本来启动reg文件?

cmd - 如何使用命令提示符删除文本文件的最后一行?

cmd - CFEXECUTE 指定它以管理员权限运行