标题: [文件操作] 批处理移动各种属性文件目录到原目录里指定的子目录 [打印本页]
作者: pine 时间: 2009-10-16 12:25 标题: 批处理移动各种属性文件目录到原目录里指定的子目录
例子:
(当前有多个类似 AAA目录,非单一个AAA目录)
1: AAA 目录下有各种各样的文件和xp.bak 和一些子目录(子目录非空,一样也有各种文件存在)
2:该目录下的文件和目录可能具有一个或多个文件属性(如:系统、隐藏、可读、存档)
3:xp.bak文件是没有隐藏属性的
4:保留文件和目录原本的文件属性
5:不要用COPY或XCOPY功能,因文件有时太多或太大,会影响速度
现想实现把 AAA目录下的所有文件和子目录移动到 AAA目录里的子目录Test (需创建Test目录),xp.bak文件不动,保留在原来的地方
我自己原本的方法是想这样,但MOVE不能移动特殊属性的文件,而且不能移动当前目录到当前目录的子目录- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a /b') do (
- for /f "delims=" %%b in ('dir /a /b %%a') do (
- if %%b neq xp.bak md %%a\Test&move %%b %%a\Test)
- )
复制代码
但因为MOVE没法移动特殊属性文件,不知道怎么解决,而且上面的代码个人看起来自己都觉得有点烦锁,呵呵,希望帮忙指点一下
例如:
AAA目录原列表
I
I__ 123.exe aaa.dll ew.ini oip.sys 555(这个是文件夹) xp.bak
想实现成这样:
AAA目录列表
I
I__ xp.bak
I
I__ Test
I
I__123.exe aaa.dll ew.ini oip.sys 555(这个是文件夹) →(TEST下的这些文件要保留原本的属性)
[ 本帖最后由 pine 于 2009-10-17 10:25 编辑 ]
作者: pine 时间: 2009-10-17 02:49
有人能帮忙解决吗?今天等了一天了,谢谢
作者: Seter 时间: 2009-10-17 08:26
你这问题有点吃人的...降低下难度行不...比如XCOPY不用实在有点麻烦的
作者: pine 时间: 2009-10-17 10:27
我重新更新了下,我也知道有些麻烦,谢谢你,希望能一起想个方案出来
作者: bhsx 时间: 2009-10-17 12:42
P文件不要放在要移动文件的目录里
- @echo off
- cd /d AAA
- dir /as /b >test\_as._as
- dir /ah /b >test\_ah._ah
- for /f "delims=" %%a in (test\_as._as) do attrib "%%a" -h -s
- for /f "delims=" %%a in (test\_ah._ah) do attrib "%%a" -h -s
- md Test
- for /f "delims=" %%a in ('dir /a /b') do if not "%%a"=="xp.bak" (move "%%a" "Test")
- for /f "delims=" %%a in (test\_as._as) do attrib "test\%%a" +s
- for /f "delims=" %%a in (test\_ah._ah) do ((attrib "test\%%a" +h|find "未重设">nul)&&(attrib "test\%%a" +h +s)||(attrib "test\%%a" +h))
- DEL test\_as._as
- DEL test\_ah._ah
- pause
复制代码
貌似WINDOWS就能简单实现..
作者: zqz0012005 时间: 2009-10-17 13:02
如果是在不同分区间移动,move的工作方式也是先copy再del source的。用COPY或XCOPY不会影响速度。
如果是在同一分区移动,可以用vbs来move,正好vbs不能跨分区移动文件夹。
作者: keen 时间: 2009-10-17 13:59
如果没有创建Test目录,请把代码中'objFSO.CreateFolder(strFolder & "Test")前的'单引号去掉。
假设你的AAA目录在C盘,根据你的实际情况改变。- strFolder = "C:\AAA\"
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- Set objFolder = objFSO.GetFolder(strFolder)
- 'objFSO.CreateFolder(strFolder & "Test")
-
- Set colFiles = objFolder.Files
- For Each File In colFiles
- If File.Name <> "xp.bak" Then
- File.Move strFolder & "Test\"
- End If
- Next
-
- Set colFolders = objFolder.SubFolders
- For Each Folder In colFolders
- If Folder.Name <> "Test" Then
- Folder.Move strFolder & "Test\"
- End If
- Next
复制代码
作者: pine 时间: 2009-10-17 14:06
谢谢bhsx,也谢谢keen,不过bhsx的方法好像有点繁锁了?我参考下,keen,能否不要用VBS,因为VBS我暂时还没编写过,我想听听大家的做法,MOVE是在同个分区里移动的。
作者: pine 时间: 2009-10-18 01:53
有没有什么方法呢,用BAT方式
作者: bhsx 时间: 2009-10-18 09:09
- REN AAA _.AAA
- MD AAA
- MOVE _.AAA AAA\TEST
- MOVE AAA\TEST\xp.bak AAA
-
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |