找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23930|回复: 3

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

[复制链接]
发表于 2013-5-12 11:33:40 | 显示全部楼层 |阅读模式
本帖最后由 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语句逐个判断。。。
困惑于如何判断文件夹的名称,让程序自动的根据名称把文件夹移动到相应的目录下。。。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-5-12 16:01:48 | 显示全部楼层
本帖最后由 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.        
  18.         rem -------------- 计算字符个数 --------------
  19.         set len=0

  20.         for %%a in (2048 1024 512 256 128 64 32 16) do (
  21.                 if "!str:~%%a!" neq "" (
  22.                         set /a len += %%a
  23.                         set str=!str:~%%a!
  24.                 )
  25.         )
  26.         set str=!str!fedcba9876543210
  27.         set /a len += 0x!str:~16,1!
  28.         rem -------------------------------------------

  29.         rem ============================
  30.         rem 构建文件夹
  31.         rem ============================
  32.         rem
  33.         set L=!dir1:~0,1!
  34.         set d1=.
  35.         for /l %%a in (1 1 !len!) do (
  36.                 set d1=!d1!\!L!!dir1:~1,%%a!
  37.         )

  38.         set d2=
  39.         if defined dir2 (
  40.                 set _str=!dir1!
  41.                 for %%a in (!dir2:.^=,!) do (
  42.                         set d2=!d2!\!_str!.%%a
  43.                         set _str=!_str!.%%a
  44.                 )
  45.         )

  46.         set final_dir=!d1!!d2!

  47.         rem ============================
  48.         rem 创建文件夹,并移动文件夹
  49.         rem ============================
  50.         rem
  51.         md "!final_dir!" 2>nul
  52.         move "%%a--%%b" "!final_dir!"

  53.         rem ============================
  54.         rem 显示结果
  55.         rem ============================
  56.         rem
  57.         echo "%%a--%%b"
  58.         echo         md "!final_dir!"
  59.         echo         move "%%a--%%b" "!final_dir!"
  60.         echo ----------------------------------------
  61. )

  62. echo,
  63. echo 完成!请按任意键退出...
  64. 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技术 +1 收起 理由
andrew3000 + 1 非常棒,学习学习

查看全部评分

 楼主| 发表于 2013-5-12 21:08:22 | 显示全部楼层
非常感谢tmplinshi版主大大的帮助,您几十行的代码,顶了咱近半个月来晚上的加班时间。。。以前只会使用TC,用笨办法一个一个的复制粘贴。。倍感欣喜的同时也倍感忧桑,自己的批处理水平差距还是蛮大的。。。
发表于 2013-5-19 14:00:37 | 显示全部楼层
谢谢分享,,怎么制作批处理启动qq
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 06:18 , Processed in 0.036727 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表