仅当不存在Zip文件时,才对不同目录中的相同文件名进行批处理

时间:2019-08-21 10:00:48

标签: windows batch-file 7zip

我正在尝试设置一个批处理文件(在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

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

1 个答案:

答案 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" 
   )