【问题标题】:Create subfolders/zip every 20 files automatically每 20 个文件自动创建子文件夹/zip
【发布时间】: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


    【解决方案1】:

    无需创建文件夹。只需遍历文件并将每个文件添加到指定的 zip 文件中(而不是将每 20 个文件复制到一个文件夹中并压缩该文件夹) 使用两个计数器来跟踪(源)文件和 zip 文件。一个计数器用于文件(使用模运算符检查每 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

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

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

    引号应注意所有空格。

    【讨论】:

    • 哦,非常感谢斯蒂芬!这完全是我想要的,我感谢你的教导。效果很好。
    【解决方案2】:

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

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

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

    它已经完成了!

    如果您知道“更快”的解决方案,请毫不犹豫地提出解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2016-09-21
      • 2013-01-09
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多