我正在尝试设置一个批处理文件(在 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 以包含路径!(即只是将 ap 添加到“%%~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%),您还可以使用此处的 BROTLI 编解码器和以下代码:
FOR /R %%f in (*.imd) DO IF NOT EXIST "%%~pnf.7z" (
7z a -mm=BROTLI -mx=2 -mmt24 "%%~pf%%~nf.7z" "%%f"
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句