Board logo

标题: [文件操作] 批处理怎么把几千个文件夹每10文件夹移动分组? [打印本页]

作者: myacg    时间: 2022-10-10 15:58     标题: 批处理怎么把几千个文件夹每10文件夹移动分组?

有几百个文件夹想归类,想要按顺序10个文件夹为一组移动到一个新的文件夹里,并取名“归类_01”、“归类_02”、“归类_03”...以此类推。请问该怎么写bat?
作者: qixiaobin0715    时间: 2022-10-10 16:42

将bat保存为ANSI编码:
  1. @echo off
  2. set n=10
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /ad') do (
  5.     set /a m=n/10
  6.     if !m! neq !x! (
  7.         set y=00!m!
  8.         set Folder=归类_!y:~-2!
  9.         md !Folder!
  10.     )
  11.     move "%%i" "!Folder!"
  12.     set /a n+=1
  13.     set /a x=m
  14. )
  15. pause
复制代码
代码未测试。
作者: myacg    时间: 2022-10-11 09:23

回复 2# qixiaobin0715

't' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'tlocal' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'r' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
系统找不到指定的文件。
请按任意键继续. . .
作者: xp3000    时间: 2022-10-11 09:30

本帖最后由 xp3000 于 2022-10-11 10:41 编辑

两位数只能99个文件夹,其他不处理了?
  1. @echo off&setlocal enabledelayedexpansion
  2. set m=1
  3. (for %%a in (*.txt) do (
  4. set/a "n+=1,1/(10*m-n+1)"||(set/am+=1)
  5. md !m!&move "%%a" .\!m!\
  6. ))2>nul
复制代码
论坛代码,txt文件自行修改自己要处理的文件类型
作者: qixiaobin0715    时间: 2022-10-11 09:33

应当不会出现这样的问题啊,代码不要手打直接复制看看。
作者: xp3000    时间: 2022-10-11 10:24

本帖最后由 xp3000 于 2022-10-11 11:22 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set m=1
  3. (for %%a in (*.txt) do (
  4. set/a "n+=1,1/(10*m-n+1)"||(set/am+=1)
  5. if !m! lss 100 (set "x=0!m!" & set x=!x:~-2!) else (set "x=00!m!" & set x=!x:~-3!)
  6. md 归类_!x!&move "%%a" .\归类_!x!\
  7. ))2>nul
复制代码
要是不处理set "x=00!m!" & set x=!x:~-3!替换为exit /b
  1. @echo off&setlocal enabledelayedexpansion
  2. set m=1
  3. (@for /f "delims=" %%a in ('dir /b/a-d/on "*.txt"') do (
  4. set/a "n+=1,1/(1*m-n+1)"||(set/am+=1)
  5. if !m! geq 1000 (set "x=!m!") else (
  6. if !m! lss 100 (set "x=00!m!" & set x=!x:~-2!) else (set "x=00!m!" & set x=!x:~-3!)
  7. )
  8. md 归类_!x!&move "%%a" .\归类_!x!\
  9. ))2>nul
复制代码
再加个4位数以上的分组
作者: pd1    时间: 2022-10-11 10:33

  1. <# :
  2. @echo off
  3. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
  4. pause
  5. #>
  6. $a=Get-ChildItem |?{$_ -is [System.IO.DirectoryInfo]}
  7. $num=($a.Length-$a.Length%10)/10+1
  8. 1..$num |foreach {md 归类_$_}
  9. 0..($a.Length-1) |foreach {$b=($_-$_%10)/10+1;move $a[$_].FullName 归类_$b }
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2