在参照这项出色的工作:
@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop
我实在想不出输出目录应该放在哪里。我想批量存档我的外部硬盘,但大多数硬盘都已满。所以我需要将输出目录更改为另一个驱动器。
我设法找到了一种使用以下命令行来实现此目的的方法:
for /d %X in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip "<destinationPath>\%X.zip" "%X\"
但是,上述批处理文件确实很有用,因为我可以简单地将尽可能多的文件夹放到其中,只要我有多余的存储空间,然后移动档案并继续下一批。
顺便说一下,这是在 Windows 上,所以请耐心等待。
答案1
7z
您提供的批处理文件中的命令使用输入文件的完整路径来获取输出文件。
为了改变这一点,您可以按照如下所示"%~1.zip"
进行更改,或者如果您不需要在新文件名中使用原始文件的扩展名,则可以更改为。"<destinationPath>\%~nx1.zip"
"<destinationPath>\%~n1.zip"
@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "<destinationPath>\%~nx1.zip" "%~1"
shift
if not [%1]==[] goto loop
为了澄清:
%~1
表示第一个输入的完全限定路径名(例如:C:\my\path\text.txt)%~n1
仅代表第一个输入的文件名(例如:文本)%~x1
仅代表第一个输入的扩展名(例如:.txt)- 这两者合并为
%~nx1
,代表第一个输入的文件名和扩展名(例如:test.txt)