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

[文件操作] 【已解决】批处理把100个数据,分成了4个文件夹,按照一定规则排序

100个数据,分成了4个文件夹(四个阶段),每个文件夹内保存了该数据的4个不同时期是数据,如何用批处理将其单独整理为按照文件名称命名的文件夹,每个文件夹下放置该文件的不同阶段的四个文件。

每个文件的命名为:阶段1_1~阶段1_100
阶段2_1~阶段2_100
阶段3_1~阶段3_100
阶段4_1~阶段4_100

合并后想要达到的效果是:阶段1_1; 阶段2_1; 阶段3_1; 阶段4_1 在同一个文件夹内。同时生成100个文件

如果可以将这些文件按照的排序按照: 阶段1_1; 阶段2_1; 阶段3_1; 阶段4_1; 阶段1_2; 阶段2_2; 阶段3_2; 阶段4_2放置到一个文件夹内,那就更好了。

谢谢大家
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# mqa3


    把代码保存为bat文件,跟4个文件夹放在一起。
运行后即可得到100个文件夹,每个文件夹下包含4个文件:阶段1_*; 阶段2_*; 阶段3_*; 阶段4_*
注意:::运行前记得备份数据。
  1. @echo off
  2. for /l %%n in (1, 1, 100) do (
  3. for /f "delims=" %%i in ('dir /b /s /a-d "阶段*_*"^|findstr /irc:".*_%%n"') do (
  4. if not exist %%n md %%n
  5. move "%%i" "%%n\"
  6. )
  7. )
  8. pause
复制代码

TOP

放到一个文件夹中并且按你所说的顺序排列,文件名要做一下改动。将1-100的顺序号移到文件名最前面,把1、2位的数字前用0补位为3位数:
  1. @echo off
  2. md "NewFolder"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d "阶段*_*.*"') do (
  5.     for /f "tokens=1* delims=_" %%j in ("%%~nxi") do (
  6.         set n=00%%~nk
  7.         set n=!n:~-3!
  8.         copy "%%i" "NewFolder\!n!_%%j%%~xi"
  9.     )
  10. )
  11. pause
复制代码
1

评分人数

TOP

回复 3# qixiaobin0715
感谢大神的支持,确实成功了。有个小问题合并的文件编号是从002开始的,能否调整到001开始呢。

TOP

回复 4# mqa3
代码除了用0补位和移位外,别的地方并没有改动,你的源文件是从2开始的?

TOP

求助时,如果牵扯到文件处理,能提供文件扩展名最好,可以精准定位到你要处理的对象,简化代码。这里假设数据文件为电子表格,xls格式,若是其它文件的话请自行修改。
楼主的第一个要求,数据不限于100个:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /a-d *.xls') do (
  3.     for /f "tokens=2 delims=_" %%j in ("%%~ni") do (
  4.         md "%%j" 2>nul
  5.         copy "%%i" "%%j\">nul
  6.     )
  7. )
  8. pause
复制代码

TOP

回复 6# qixiaobin0715

感谢大神 @qixiaobin0715  完美解决我的问题。我坛真的卧虎藏龙,批处理真是博大精深。

TOP

不是批处理博大精深,而是批处理正巧善于处理此类问题。

TOP

返回列表