【发布时间】:2020-08-28 14:28:14
【问题描述】:
我有一个很大的文件夹,我想将它转换成几个小的文件夹,每个文件夹有 20 个文件并进行压缩。我想使用批处理文件和 7zip 自动执行此操作。
为了实现这一点,我考虑了 2 个步骤:
1.为每 20 个文件创建一个子文件夹 (source):
@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,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 包含我的完整文件列表,没有任何分隔符(每行一个文件)。
--- 更新:文件名不能包含空格 ---
2。使用 (source) 逐一压缩所有这些子文件夹:for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
你有没有想法(我总结一下):为大量文件创建20个文件的子文件夹,以便一个一个地压缩每个子文件夹。
如果您对如何直接压缩每 20 个文件有任何想法(无需创建子文件夹),我也同意!
提前感谢您的帮助!
【问题讨论】:
标签: windows batch-file cmd zip 7zip