自动每20个文件创建一个子文件夹.zip



我有一个巨大的文件夹,我想把它转换成几个小文件夹,每个文件夹有20个文件并压缩。我想用一个批处理文件和7zip自动完成这项工作。

为了实现这一点,我考虑了两个步骤

1.为每20个文件创建一个子文件夹(来源(:

@echo off
set /a counter=1
set /a filesperfolder=20
cd "C:UsersDesktopdir"
:loopstart
set dirname=dir_%counter%
md %dirname%
echo %dirname%
dir /b | findstr /v /i "dir_*"> %temp%temp.txt && for /l %%l in (1,1,%filesperfolder%) do @for /f "tokens=1,2* delims=:" %%a in ('findstr /n /r "^" %temp%temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%%%b >nul
set /a counter=%counter%+1
for /f "tokens=*" %%a in ('type %temp%temp.txt ^| find /c /v ""') do set _filesmoved=%%a
del %temp%temp.txt
IF %_filesmoved% LSS 20 goto done
goto loopstart
:done
cls
echo All files were moved!!
pause
exit

不幸的是,这不起作用:The syntax of the command is incorrect.。我试着通过删除@echo off来调试脚本,它告诉我dir /b | findstr /v /i "dir_*"> %temp%temp.txt && for /l %%l in (1,1,%filesperfolder%) do @for /f "tokens=1,2* delims=:" %%a in ('findstr /n /r "^" %temp%temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%%%b >nul部分不工作(相同错误(。这一部分对我来说相当模糊,欢迎提供一些帮助
我指定文件temp.txt包含我的完整文件列表,没有任何分隔符(每行一个文件(

---UPDATE:文件名不得包含空格---

2.使用(源(:
for /D %d in (*.*) do 7z a -tzip "%d.zip" ".%d*"逐个压缩所有这些子文件夹

你有这样的想法吗(我总结一下(:为大量文件创建20个文件的子文件夹,以便逐个压缩每个子文件夹。

如果你对如何直接压缩每个20个文件有任何想法(不需要创建子文件夹(,我也同意

提前感谢您的帮助!

已解决
我发现了错误。事实上,我的文件中包含了脚本无法容纳的空间。

因此,为了回答我的基本问题:在一个装满数千个文件的大文件夹中,如何压缩子文件夹中的每20个文件(据我所知(有必要:

  1. 为每20个文件创建一个子文件夹,其名称没有空格(我的问题中的代码(
  2. 逐个压缩所有这些子文件夹(我的问题中的代码(

完成了!

如果您知道";"更快";一

无需创建文件夹。只需迭代文件并将每个文件添加到指定的zip文件中(而不是将每20个文件复制到一个文件夹中并压缩该文件夹(使用两个计数器来跟踪(源(文件和zip文件。一个计数器用于文件(使用Modulo运算符检查每20个(,一个用于zip文件名。我用10001而不是1启动zip文件名,并用它的最后四个字符来获得可排序的文件名(0001.zip等(。

@echo off 
setlocal enabledelayedexpansion
set filesperfolder=20
cd /d "%cd%"
set "zipDest=C:temp"
set filecounter=0
set foldercounter=10001
for %%a in (*) do (
set /a filecounter+=1
set /a check=filecounter %% filesperfolder
if !check! == 0 set /a foldercounter+=1
ECHO 7z a -tzip "%zipDest%!foldercounter:~-4!.zip" "%%a"
)

显然,要调整cd /d行(源文件夹(、目标文件夹(注意:不要使用源文件夹,否则你的zip文件可能会再次压缩到其他zip文件中(,也许还有zip文件名(如"%zipDest%MyZips-!foldercounter:~-4!.zip"(

注意:为了进行测试和故障排除,我使用ECHO解除了7zip命令的武装。当输出满足您的要求时,移除ECHO

要在成功压缩文件后删除每个文件,请将压缩线更改为:

7z a -tzip "%zipDest%!foldercounter:~-4!.zip" "%%a" && del "%%a"

引号应该注意任何空格。

最新更新