[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎么把几千个文件夹每10文件夹移动分组?

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

  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 }
复制代码

TOP

本帖最后由 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位数以上的分组

TOP

应当不会出现这样的问题啊,代码不要手打直接复制看看。

TOP

本帖最后由 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文件自行修改自己要处理的文件类型

TOP

回复 2# qixiaobin0715

't' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'tlocal' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'r' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
系统找不到指定的文件。
请按任意键继续. . .

TOP

将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
复制代码
代码未测试。

TOP

返回列表