标题: [文件操作] 批处理如何删除文件夹中多余目录? [打印本页]
作者: shezhanxi1 时间: 2010-10-15 20:48 标题: 批处理如何删除文件夹中多余目录?
各位大仙你们好!我的这个问题比较繁琐,烦劳热心人帮我编写一个程序来解决下面问题。
我现在手头有一个报表,报表的目录格式如下:
-201001
|-20100101
|-5002
|-5003
|-5004
|-5034
.....
|-20100102
... ...
其中5002,5003,5004等均为文件夹名称(5002等每个文件夹中有一个文件,且5002,5003,等文件夹中文件不会重名),5002,5003,5004为20100101的子目录,20100101又为201001的子目录,我想通过批处理将5002,5003,...下的文件拷贝至20100101下,然后删除5002,5003,...等文件夹。
----
后注:20100102目录结构同20100101相同,总共能到20101017,这些文件夹要实现的功能与20100101相同,如果能通过批处理一步实现所有文件夹得功能,那就更感谢了!!!!!
作者: broly 时间: 2010-10-15 22:27
放在201001文件夹下运行
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b/ad') do (
- cd /d "%~dp0%%i"
- for /f "delims=" %%j in ('dir /b/ad') do (
- move /y "!cd!\%%j\*" "!cd!" && rd "!cd!\%%j" /q/s
- )
- )
- pause
复制代码
作者: hfg1977 时间: 2010-10-15 22:51
我也试了一下:- ::放在与201001同一级目录;
- ::只有最底层目录包含文件且只有一个文件;
- ::工作流程: 找到那一个文件,移动到到上一级,删除那一个文件原来所在的目录(非空则不删除)
-
- @echo on
- for /f "tokens=* delims=" %%a in ('dir/b/s/a-d .\201001\') do (
- move "%%a" "%%~dpa.\..\"
- rd "%%~dpa"
- )
- ::pause
复制代码
- ::放在与201001同一级目录;
- ::只有最底层目录包含文件可以有多个文件件;
- ::工作流程: 找到那一个文件,连同和它同级的所有文件\夹移动到到上一级,删除那一个文件原来所在的目录(非空则不删除)
-
- @echo on
- for /f "tokens=* delims=" %%a in ('dir/b/s/a-d .\201001\') do (
- move "%%~dpa.\*.*" "%%~dpa.\..\"
- rd "%%~dpa"
- )
- ::pause
复制代码
[ 本帖最后由 hfg1977 于 2010-10-15 22:58 编辑 ]
作者: Batcher 时间: 2010-10-15 22:53 标题: 回复 3楼 的帖子
所有的代码都顶格写,这样不太好吧?
作者: hfg1977 时间: 2010-10-15 23:02
RE: 4
在某些情况下一些命令不顶格会出现莫名的错误,
以前遇到过, 除非非常复杂的嵌套,不必追求.
作者: cjiabing 时间: 2010-10-15 23:19 标题: 回复 5楼 的帖子
好喜欢你们的代码,简单有效!~
退格是否真的会在某些情况下发生错误?
我今天郁闷了一天,因为我把以前的代码优化了一下,第一次尝试把它们全部退格了,同时可能还改了一些其他命令,但许多原来执行很正常的命令整体上都出现了错误,害得我不停地测试和修改,真不知道是否与此有关???
从另外一个角度考虑,批处理是以行进行的,同时意味着某些命令以每行第一个字符作为判断,退格与顶格之间的差别在于空格上……
作者: zqz0012005 时间: 2010-10-15 23:48
缩进不会导致错误,至少我写代码这么多年来没遇到过。
作者: cjiabing 时间: 2010-10-15 23:58 标题: 回复 7楼 的帖子
在使用全局变量延迟的时候变量用叹号括起来,但以前我只在部分FOR中用叹号,许多情况下用百分号。刚才我把所有变量(系统变量除外)全部改成叹号又好了,但以前不改也可以正确执行,为啥呢?
作者: zqz0012005 时间: 2010-10-16 00:02
拿代码来
作者: cjiabing 时间: 2010-10-16 00:11 标题: 回复 9楼 的帖子
晕,早已改得面目全非了,现在还在改!~
作者: zqz0012005 时间: 2010-10-16 00:25
那就与7楼无关
作者: shezhanxi1 时间: 2010-10-16 08:06 标题: 非常感谢各位大仙的指教,但是均不能实现我的功能
现在我上传我的文件,烦劳大仙们帮我看看!下载后将txt缀修改为rar,然后解压
作者: netbenton 时间: 2010-10-16 12:01
放到:201001目录下
http://bathome.l3.wuyou.com/view ... amp;page=1#pid62368
作者: Batcher 时间: 2010-10-16 12:24 标题: 回复 5楼 的帖子
Shell的here doc会有问题,但是BAT不会出现你说的问题。
作者: Batcher 时间: 2010-10-16 12:27 标题: 回复 12楼 的帖子
请把它更新到顶楼
作者: netbenton 时间: 2010-10-16 12:32
我从来没有遇到过缩进影响到BAT运行的问题。
cjiabing 能否举个例子,并给出问题代码来看看。
作者: broly 时间: 2010-10-16 15:43
楼主,2L的代码不行,是因为你的文件是跟文件夹重名的。这个你没有事先说清楚。
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b/ad') do (
- cd /d "%~dp0%%i"
- for /f "delims=" %%j in ('dir /b/ad') do (
- ren "!cd!\%%j" "%%j_" && move /y "!cd!\%%j_\*" "!cd!" && rd "!cd!\%%j_" /q/s
- )
- )
- pause
复制代码
作者: shezhanxi1 时间: 2010-10-16 17:04 标题: 回复 17楼 的帖子
非常感谢大家,非常感谢Broly,非常感谢批处理论坛!
作者: wc726842270 时间: 2010-10-16 20:45 标题: 回复 8楼 的帖子
当开启全局变量延迟时,FOR中的变量一定要用"!"(我想其它的复合语句也是一样的),而其它的单句中用%或!都可以吧
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |