我正在尝试设置一个批处理文件(在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
但是我对批处理文件的了解太有限了!
答案 0 :(得分:0)
钉了!
键很简单-更改“不存在”以包含路径! (即只需将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"
)