标题: [文件操作] [已解决]如何精简复制文件不复制目录并删除子目录的批处理? [打印本页]
作者: 鹤冲天 时间: 2008-6-10 22:36 标题: [已解决]如何精简复制文件不复制目录并删除子目录的批处理?
总从网上下美剧,弄的当前目录下都是子目录然后才是文件,找个文件很麻烦!写了个P能实现从子目录中把文件都COPY(MOVE)到总目录下,并删除子目录,但本人是小鸟儿,用的是笨法子,希望高手们提供个精巧点的方子,也让小鸟儿们学习学习!!- set mypath=%cd:\=\%
- dir/a-d/b/s *.* >12345.txt
- For /f %%i in (12345.txt) DO copy %%i %mypath%
- dir/ad /b >54321.txt
- for /f %%j in (54321.txt) do rd /s /q %%j
- cd
- ::del 12345.txt 54321.txt %0
- pause
复制代码
[ 本帖最后由 鹤冲天 于 2008-6-13 00:31 编辑 ]
作者: 随风 时间: 2008-6-10 23:03
总目录 是指的什么目录?当前目录,还是根目录?
作者: youxi01 时间: 2008-6-10 23:22
根据他的意思,应该指的就是 当前目录。
他的原意应该是:“当前目录”下很多子目录,电影文件都在那些子目录里...
作者: 随风 时间: 2008-6-11 00:09
看你的代码是把当前目录下(含子目录)的所有文件都移动到了当前目录
且产生了临时文件,并且效率低下。
以下是把后缀名为 rmvb 和 wma 的视频文件都移动到当前目录,并所有空文件夹的代码
若还需要移动其它后缀名的文件,可以在第一个for里自行添加用空格分开。
未测试。。。建议先测试再使用。。。。
有问题回帖,
:- @echo off
- for %%a in (rmvb wma) do set .%%a=a
- for /f "delims=" %%a in ('dir/b/s/a-d') do (
- if defined %%~xa (
- if /i not "%%~dpa"=="%cd%\" move "%%a" "%cd%"
- )
- )
- for /f "delims=" %%a in ('dir/b/s/ad ^|sort /r') do rd "%%a"
- pause
复制代码
作者: lovelymorning 时间: 2008-6-11 14:57
- for /f "delims=" %%i in ('dir /ad /b /s^|sort /r') do (move "%%i\*.*" .\ && rd /s /q "%%i")
复制代码
试试这一句
其实没那么复杂的。先用 dir /ad /b /s 列出当前目录下的所有子目录,然后把结果传给 sort /r 倒序排列,然后用 move 移动这文件夹下的所有文件到批处理的所在目录,移完后用 rd 删除,移动跟删除一起来,简单多了
注:代码仅供参考。测试成功,但不保证你那也可以用。不支持自动重命名,如果当前上当存在同名文件,会提示,因为 move 没有加 /y
[ 本帖最后由 lovelymorning 于 2008-6-11 14:58 编辑 ]
作者: 随风 时间: 2008-6-11 15:59
原来当前目录可以这样表示 .\ 请问和 %cd% 有什么区别吗? 好像这样当路径有空格时,连引号都可以省略了。
学到。。。
作者: namejm 时间: 2008-6-11 18:27
楼主若要得到完美的解决方案,还得把完整的目录结构发出来才行,否则,写出来的代码没有针对性,也就无从解决你的问题了。建议用 tree /f 来列文件目录。
作者: 鹤冲天 时间: 2008-6-12 01:15
嘿嘿,就知道在这里发帖能学到东西!:)
顺便抱歉下,语言组织的不是很严密!SORRY!!
re:lovelymorning&随风
没想到可以这样写,感谢5楼以及4楼的代码!!
re:namejm
原目录已经没有了,用偶的P也能把活赶了。我把我试验的目录列了出来。
把所有bat文件复制或移动到当前目录下,并删除子目录及文件。
-
- F:\临时存储空间\TEST\新建文件夹\TEST
- │ 1.txt
- │
- ├─BAT加密
- │ │ BATCrypt.DLL
- │ │ BAT加密.exe
- │ │ test1.bat
- │ │
- │ └─zipbat
- │ zipbat.bat
- │
- ├─ExeScript
- │ chinese.xml
- │ curmenu.ini
- │ ExeScript.chm
- │ exescript.exe
- │ ExeScript.exe.manifest
- │ install.sss
- │ script.pe
- │ script_silent.pe
- │ test2.bat
- │ unins000.dat
- │ unins000.exe
- │
- └─QuickBatch FileCompiler-v2.1.5.0
- quickbfc.chm
- quickbfc.exe
- quickbfd.exe
- Re.txt
- stubc.dll
- stubg.dll
- test3.bat
- test4.bat
- 下载说明.htm
复制代码
作者: 随风 时间: 2008-6-12 01:50
5楼代码就可以啊,把move "%%i\*.*" 改为move "%%i\*.bat" 就可以了
作者: namejm 时间: 2008-6-12 18:48
5楼的代码确实非常简练,完全可以满足楼主的需要——若不存在同名文件的话。
另外,如果还想继续精简,还是可以的,不过可精简之处不多,仅仅少写两个字符而已:move 语句后面的 .\ 可以去掉——当 move 语句只带一个路径的时候,默认是把该路径下的文件移动到当前目录下。
作者: 鹤冲天 时间: 2008-6-13 00:31
顺便问下,小鸟是不是不能加分???
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |