我有这个脚本的一部分,用于在文件夹结构中递归地单独加密/压缩文件。
它可以工作,除非它似乎是一个特定的文件夹,它会返回并开始压缩已经压缩的文件。我不太清楚是什么原因造成的。
文件夹中的文件名也都是一致的(它们是图像)。比如“ 2017-08-16 18.16.51.jpg
”。压缩每个文件后,它会命名文件file1.7z
file2.7z
file3.7z
,直到遍历所有子文件夹中的所有文件。
这是代码:
SETLOCAL DISABLEDELAYEDEXPANSION
...
...
<MORE SCRIPT HERE>
...
...
set count=0
for /r "%sourcedir%" %%a in (*) do (
CLS
set /A count+=1
SETLOCAL EnableDelayedExpansion
set fnz=file!count!.7z
ECHO ***
ECHO *** ENCRYPTING "%%a" as "!fnz!"
ECHO ***
ECHO *** FILE NUMBER !count! OUT OF !files!
ECHO ***
ECHO %%a !fnz! >> "!batchdir!7ZIP_FILEREF_!folderzip!.txt"
!batchdir!7z.exe a -mx9 -sdel -p"!password!" -mhe=on "%%~dpa!fnz!" "%%a" >nul
ENDLOCAL
)
...
...
<MORE SCRIPT HERE>
...
...
ENDLOCAL
变量batchdir
和folderzip
较早在脚本中设置。
这是日志从最后一个文件翻转时的一些示例输出,以开始压缩已经压缩的文件file100.7z
。左边的文件/文件夹是被压缩的文件。file###.7z
右边的文件是压缩文件名:
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-13 13.24.18.jpg file961.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-13 13.25.02.mp4 file962.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-14 18.03.02.mp4 file963.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-15 12.33.20.jpg file964.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.16.51.jpg file965.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.16.53.jpg file966.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.18.26.jpg file967.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.18.27.jpg file968.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.18.29.jpg file969.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-17 13.10.56.jpg file970.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-18 06.59.19.jpg file971.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\BMPhoneWallpaper.png file972.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file100.7z file973.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file101.7z file974.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file102.7z file975.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file103.7z file976.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file104.7z file977.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file105.7z file978.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file106.7z file979.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file107.7z file980.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file108.7z file981.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file109.7z file982.7z
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file110.7z file983.7z
就像我说的,到目前为止,它只有这个 ONE subfolder Camera 2017
。我有其他像这样的文件夹Camera 2014
Camera 2015
Camera 2016
,zip 完全没有问题。
for /r 循环按字母顺序对文件进行解析,并在运行时继续解析,因为您正在创建文件
当它到达“f”时,它开始在列表中包含您使用 7zip 创建的文件。
我猜如果源目标文件具有相同的内容,您就不会遇到这个问题:
如果您正在处理创建文件的操作,无论如何 /r 不是最佳选择。
最好将 For /f 与 dir 命令结合使用:
安装: