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

[文件操作] 【已解决】批处理操作文件夹

本帖最后由 andrew3000 于 2013-5-12 21:08 编辑

批处理操作文件夹

在同一级目录下,有N个文件夹,文件夹名称有如下规律

1)文件夹名称采用单个大写字母+数字+“--中文”的形式。
   如: C025--参考工具书
        D146.35--海洋起源
        X443.234.4--航天工程

2)有类似于如下的规律
   A0,A01,A012,A013,A013.1,....
            A02,A023,A025,A025.7,....
     A1,A13,A135,A135.6,.....

3)如果文件夹名称中带小数点,规律是每个三个数字带个小数点,如:A015.273.4,最多会出现两个小数点。

4)文件夹名称中的中文各不相同。


想要的最终结果是,文件夹结构如下排列:

|-A0
|   A01
|       A012
|       A013
|           A013.1
|   A02
|       A023
|       A025
|           A025.7
|
|-A1
|   A13
|       A135
|           A135.6
|


自己的思路是在此目录下,先dir出所有文件,保存到一个txt文档中,然后用FOR语句逐个判断。。。
困惑于如何判断文件夹的名称,让程序自动的根据名称把文件夹移动到相应的目录下。。。
1

评分人数

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

本帖最后由 tmplinshi 于 2013-5-12 16:13 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,* delims=-" %%a in (' dir /a:d /b *--* ') do (
  4. rem ============================
  5. rem 把“--”前面的字符,再次以第一个“.”进行分解
  6. rem ============================
  7. rem
  8. for /f "tokens=1,* delims=." %%i in ("%%a") do (
  9. set dir1=%%i
  10. set dir2=%%j
  11. )
  12. rem ============================
  13. rem 计算第一个“.”前面的字符个数
  14. rem ============================
  15. rem
  16. set str=!dir1!
  17. rem -------------- 计算字符个数 --------------
  18. set len=0
  19. for %%a in (2048 1024 512 256 128 64 32 16) do (
  20. if "!str:~%%a!" neq "" (
  21. set /a len += %%a
  22. set str=!str:~%%a!
  23. )
  24. )
  25. set str=!str!fedcba9876543210
  26. set /a len += 0x!str:~16,1!
  27. rem -------------------------------------------
  28. rem ============================
  29. rem 构建文件夹
  30. rem ============================
  31. rem
  32. set L=!dir1:~0,1!
  33. set d1=.
  34. for /l %%a in (1 1 !len!) do (
  35. set d1=!d1!\!L!!dir1:~1,%%a!
  36. )
  37. set d2=
  38. if defined dir2 (
  39. set _str=!dir1!
  40. for %%a in (!dir2:.^=,!) do (
  41. set d2=!d2!\!_str!.%%a
  42. set _str=!_str!.%%a
  43. )
  44. )
  45. set final_dir=!d1!!d2!
  46. rem ============================
  47. rem 创建文件夹,并移动文件夹
  48. rem ============================
  49. rem
  50. md "!final_dir!" 2>nul
  51. move "%%a--%%b" "!final_dir!"
  52. rem ============================
  53. rem 显示结果
  54. rem ============================
  55. rem
  56. echo "%%a--%%b"
  57. echo md "!final_dir!"
  58. echo move "%%a--%%b" "!final_dir!"
  59. echo ----------------------------------------
  60. )
  61. echo,
  62. echo 完成!请按任意键退出...
  63. pause >nul
复制代码
============================================================

创建测试文件夹:
  1. @echo off
  2. rem 创建测试环境
  3. for %%a in (
  4.     A0--参考工具书,A01--海洋起源,A012--航天工程,A013--的规律,A013.1--只看该作者
  5.     A02--大写字母,A025.7.3--工程,A023--夹名称,A025--级目录,A025.7--路是在
  6.     A1--操作,A13--同一级,A135--作文件,A135.6--下的,A025.7.4--自动的根据名称把文
  7. ) do md %%a
复制代码
运行结果:
"A0--参考工具书"
        md ".\A0"
        move "A0--参考工具书" ".\A0"
----------------------------------------
"A01--海洋起源"
        md ".\A0\A01"
        move "A01--海洋起源" ".\A0\A01"
----------------------------------------
"A012--航天工程"
        md ".\A0\A01\A012"
        move "A012--航天工程" ".\A0\A01\A012"
----------------------------------------
"A013--的规律"
        md ".\A0\A01\A013"
        move "A013--的规律" ".\A0\A01\A013"
----------------------------------------
"A013.1--只看该作者"
        md ".\A0\A01\A013\A013.1"
        move "A013.1--只看该作者" ".\A0\A01\A013\A013.1"
----------------------------------------
"A02--大写字母"
        md ".\A0\A02"
        move "A02--大写字母" ".\A0\A02"
----------------------------------------
"A023--夹名称"
        md ".\A0\A02\A023"
        move "A023--夹名称" ".\A0\A02\A023"
----------------------------------------
"A025--级目录"
        md ".\A0\A02\A025"
        move "A025--级目录" ".\A0\A02\A025"
----------------------------------------
"A025.7--路是在"
        md ".\A0\A02\A025\A025.7"
        move "A025.7--路是在" ".\A0\A02\A025\A025.7"
----------------------------------------
"A025.7.3--工程"
        md ".\A0\A02\A025\A025.7\A025.7.3"
        move "A025.7.3--工程" ".\A0\A02\A025\A025.7\A025.7.3"
----------------------------------------
"A025.7.4--自动的根据名称把文"
        md ".\A0\A02\A025\A025.7\A025.7.4"
        move "A025.7.4--自动的根据名称把文" ".\A0\A02\A025\A025.7\A025.7.4"
----------------------------------------
"A1--操作"
        md ".\A1"
        move "A1--操作" ".\A1"
----------------------------------------
"A13--同一级"
        md ".\A1\A13"
        move "A13--同一级" ".\A1\A13"
----------------------------------------
"A135--作文件"
        md ".\A1\A13\A135"
        move "A135--作文件" ".\A1\A13\A135"
----------------------------------------
"A135.6--下的"
        md ".\A1\A13\A135\A135.6"
        move "A135.6--下的" ".\A1\A13\A135\A135.6"
----------------------------------------

完成!请按任意键退出...


运行批处理后的目录树结构:
├─A0
│  ├─A0--参考工具书
│  ├─A01
│  │  ├─A01--海洋起源
│  │  ├─A012
│  │  │  └─A012--航天工程
│  │  └─A013
│  │      ├─A013--的规律
│  │      └─A013.1
│  │          └─A013.1--只看该作者
│  └─A02
│      ├─A02--大写字母
│      ├─A023
│      │  └─A023--夹名称
│      └─A025
│          ├─A025--级目录
│          └─A025.7
│              ├─A025.7--路是在
│              ├─A025.7.3
│              │  └─A025.7.3--工程
│              └─A025.7.4
│                  └─A025.7.4--自动的根据名称把文
└─A1
    ├─A1--操作
    └─A13
        ├─A13--同一级
        └─A135
            ├─A135--作文件
            └─A135.6
                └─A135.6--下的
1

评分人数

TOP

非常感谢tmplinshi版主大大的帮助,您几十行的代码,顶了咱近半个月来晚上的加班时间。。。以前只会使用TC,用笨办法一个一个的复制粘贴。。倍感欣喜的同时也倍感忧桑,自己的批处理水平差距还是蛮大的。。。

TOP

谢谢分享,,怎么制作批处理启动qq

TOP

返回列表