仅当 Zip 文件不存在时才批处理 Zip 文件不适用于不同目录中的相同文件名
Batch Zip files only if they don't exist not working for identical file names in different directories
我正在尝试设置一个批处理文件(在 Windows 中),仅当文件不存在时才会压缩文件。
我几乎让它工作了,但是对于存在于不同目录中的相同文件名它会失败(它只是忽略它们,假设它已经完成了)。
我认为我的代码只是查看文件名,忽略了它们的位置,而且我还需要以某种方式引用它们的位置。
我已经尝试搜索(并将继续搜索)解决方案,如果我找到了什么,我会 post 返回这里,但希望有人可以提出建议。
据我所知,下面的代码将递归搜索所有 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 以包含路径! (即只需将 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"
)
EDIT - 为了轻微加速(~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"
)
我正在尝试设置一个批处理文件(在 Windows 中),仅当文件不存在时才会压缩文件。
我几乎让它工作了,但是对于存在于不同目录中的相同文件名它会失败(它只是忽略它们,假设它已经完成了)。
我认为我的代码只是查看文件名,忽略了它们的位置,而且我还需要以某种方式引用它们的位置。
我已经尝试搜索(并将继续搜索)解决方案,如果我找到了什么,我会 post 返回这里,但希望有人可以提出建议。
据我所知,下面的代码将递归搜索所有 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 以包含路径! (即只需将 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"
)
EDIT - 为了轻微加速(~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"
)