【问题标题】:How to create a ZIP file with WinRAR with name of ZIP file being name of current folder?如何使用 WinRAR 创建一个 ZIP 文件,ZIP 文件的名称是当前文件夹的名称?
【发布时间】:2016-09-14 18:33:01
【问题描述】:

我正在尝试制作一个 .bat 文件,该文件将压缩所选文件,其文件名自动匹配当前文件夹名称和自定义扩展名。

例如,在目录C:\thisIsAFolder\

Winrar a -afzip %thisIsAFolder%.PicZip *.jpg *.png *.gif

我尝试使用%CD%,但它不起作用,可能是因为末尾有终止符?

这是较大批处理文件的一小部分,但它是唯一不起作用的部分。

我愿意替代使用批处理文件。

【问题讨论】:

  • echo on 放在问题行的上方,看看它输出了什么。这个命令看起来对吗?
  • 假设您正在尝试将父目录名称放入变量中。 for %%a in ("%~dp0\..") do set parent=%%~nxa
  • Ryan,感谢您的回声建议,问题是包含完整的路径名; c:/etc.
  • Squashman,这是一个很好的建议,它适用于父文件夹,但我在当前文件夹之后。如果我想学这个,我会学什么科目?
  • @Frodofeet 只是批处理的一般调试技巧:不要在关闭回显的情况下进行调试。这就像在黑暗中对癫痫患者进行手术一样。 :)

标签: windows batch-file


【解决方案1】:

此批处理代码可用于此任务:

@echo off
if not "%CD:~-1%" == "\" (
    for /F %%I in ("%CD%") do set "FolderName=%%~nxI"
) else (
    set "FolderName=Drive%CD:~0,1%"
)
"%ProgramFiles%\WinRAR\WinRAR.exe" a -afzip -cfg- -ibck -m0 -y "%FolderName%.PicZip" *.jpg *.png *.gif
set FolderName=

注意:WinRAR.exe 的路径在您的计算机上可能会有所不同,具体取决于 WinRAR 的安装。

环境变量CD 保存当前目录的路径。此路径不以反斜杠结尾,除非当前目录是驱动器的根目录。

IF 条件将当前目录路径的最后一个字符与反斜杠进行比较。最后一个字符不是反斜杠,命令 FOR 用于从整个目录路径中获取最后一个反斜杠之后的字符串,即当前目录的名称。否则当前目录是驱动器的根目录,文件夹名称定义为Drive,并附加驱动器号。

ZIP 文件是使用压缩方法 store 创建的,因为开关 -m0 因为 *.jpg、*.png 和 *.gif 文件包含已压缩的数据,因此重新压缩没有多大意义。

有关 WinRAR 中打开的开关的说明,从菜单 帮助 帮助主题。在标签 Contents 上打开列表项 Command line mode 和子项 Switches。打开帮助页面字母开关列表并阅读开关。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • echo /?
  • if /?
  • for /?
  • set /?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2019-05-04
    相关资源
    最近更新 更多