问题描述
我有一个很大的文件夹,我想将其转换成几个小文件,每个文件20个并压缩。我想使用批处理文件和7zip自动执行此操作。
要实现这一目标,我考虑了2个步骤:
@echo off
set /a counter=1
set /a filesperfolder=20
cd "C:\Users\Desktop\dir\"
: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,2* delims=:" %%a in ('findstr /n /r "^" %temp%\temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%\%%b >nul
部分无法正常工作(相同错误)。这部分对我来说很模糊,欢迎您提供一些帮助。
我指定文件 temp.txt 包含完整的文件列表,没有任何分隔符(每行一个文件)。
---更新:文件名不能包含空格---
2。用(source)逐个压缩所有这些子文件夹:for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
您是否有一个想法(我总结一下):为大量文件创建20个文件的子文件夹,以便逐个压缩每个子文件夹。
如果您对如何直接压缩每个20个文件有任何想法(无需创建子文件夹),我也同意!
预先感谢您的帮助!
解决方法
已解决!
我发现了我的错误。实际上,我的文件包含脚本无法容纳的空间。
因此,要回答我的基本问题:在一个装有数千个文件的大文件夹中,如何压缩子文件夹中的每个20个文件?(据我所知)有必要:
就完成了!
如果您知道“更快”的解决方案,请毫不犹豫地提出解决方案。
,无需创建文件夹。只需遍历文件并将每个文件添加到指定的zip文件中即可(而不是将每20个文件复制到一个文件夹中并对该文件夹进行zip压缩)
使用两个计数器来跟踪(源)文件和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"
引号应包含空格。