【问题标题】:Batch Zip files only if they don't exist not working for identical file names in different directories仅当它们不存在时才批处理 Zip 文件不适用于不同目录中的相同文件名
【发布时间】:2019-08-22 16:42:37
【问题描述】:

我正在尝试设置一个批处理文件(在 Windows 中),仅当文件尚未作为 zip 存在时才会压缩文件。

我已经几乎让它工作了,但是对于存在于 不同 目录中的相同文件名它会失败(它只是忽略它们,假设它已经完成了它们) .

我认为我的代码只是查看文件名,而忽略了它们的位置,并且不知何故我还需要引用它们的位置。

我已尝试搜索(并将继续搜索)解决方案,如果我发现了什么,我会在此处发帖,但希望有人可以提出建议。

据我了解,以下代码将递归搜索所有 fcs 文件并压缩(7z)它们,如果它也无法找到 7z 格式的等效文件。

FOR /R %%f in (*.fcs) DO IF NOT EXIST "%%~nf.7z" (
            7z a -mm=LZMA2 -mx=1 -mmt24 "%%~pf%%~nf.7z" "%%f" 
    )

它几乎可以工作,但当不同目录中存在相同的文件名时,它会简单地忽略它们,因为它认为它们已经被压缩了。

我需要添加什么才能让它识别不同目录中的相同名称?

我考虑过比较两个列表,例如

dir /b /s /a-d *.fcs >FilestoZip
dir /b /s /a-d *.7z >FilesAlreadyZipped

但是我对批处理文件的了解太有限了!

【问题讨论】:

  • IF NOT EXIST "%%~nf.7z" 不会检查整个树是否出现basename.7z,它只检查当前工作目录。如果您决定比较两个列表,您可以使用FINDSTR 选择一个列表中不存在于另一个列表中的那些,并将它们发送到 7z.exe。如果您打开命令提示符窗口并输入findstr /?,您可以阅读该特定命令的使用信息。

标签: windows batch-file 7zip


【解决方案1】:

成功了!

关键很简单 - 更改 IF NOT EXIST 以包含路径! (即只是将 p 添加到“%%~nf.7z”。

=)

完整的工作代码:

FOR /R %%f in (*.fcs) DO IF NOT EXIST "%%~pnf.7z" (
            7z a -mm=LZMA2 -mx=1 -mmt24 "%%~pf%%~nf.7z" "%%f" 
    )

编辑 - 为了轻微 加速 (~10%),您还可以使用来自 here 的 BROTLI 编解码器和以下代码:

FOR /R %%f in (*.imd) DO IF NOT EXIST "%%~pnf.7z" (
         7z a -mm=BROTLI -mx=2 -mmt24 "%%~pf%%~nf.7z" "%%f" 
   )

【讨论】:

  • 为什么不也添加驱动器,例如%%~dpnf.7z?为什么你不在第二行写完全一样的方式(因为%%~[d]pf%%~nf.7z%%~[d]pnf.7z一样)?
  • 我不需要驱动器,因为我只在一个驱动器上工作。至于另一个建议 - 我不知道。我只是复制了我在别处找到的代码,它可以工作,所以我不会费心去修改它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多