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

[文件操作] 批处理移动各种属性文件目录到原目录里指定的子目录

例子:
(当前有多个类似 AAA目录,非单一个AAA目录)
1: AAA 目录下有各种各样的文件和xp.bak 和一些子目录(子目录非空,一样也有各种文件存在)
2:该目录下的文件和目录可能具有一个或多个文件属性(如:系统、隐藏、可读、存档)
3:xp.bak文件是没有隐藏属性的
4:保留文件和目录原本的文件属性
5:不要用COPY或XCOPY功能,因文件有时太多或太大,会影响速度


现想实现把  AAA目录下的所有文件和子目录移动到 AAA目录里的子目录Test 需创建Test目录),xp.bak文件不动,保留在原来的地方

我自己原本的方法是想这样,但MOVE不能移动特殊属性的文件,而且不能移动当前目录到当前目录的子目录
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a /b') do (
  3. for /f "delims=" %%b in ('dir /a /b %%a') do (
  4. if %%b neq xp.bak md %%a\Test&move %%b %%a\Test)
  5. )
复制代码
但因为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 编辑 ]

有人能帮忙解决吗?今天等了一天了,谢谢

TOP

你这问题有点吃人的...降低下难度行不...比如XCOPY不用实在有点麻烦的

TOP

我重新更新了下,我也知道有些麻烦,谢谢你,希望能一起想个方案出来

TOP

P文件不要放在要移动文件的目录里
  1. @echo off
  2. cd /d AAA
  3. dir /as /b >test\_as._as
  4. dir /ah /b >test\_ah._ah
  5. for /f "delims=" %%a in (test\_as._as) do attrib "%%a" -h -s
  6. for /f "delims=" %%a in (test\_ah._ah) do attrib "%%a" -h -s
  7. md Test
  8. for /f "delims=" %%a in ('dir /a /b') do if not "%%a"=="xp.bak" (move "%%a" "Test")
  9. for /f "delims=" %%a in (test\_as._as) do attrib "test\%%a" +s
  10. for /f "delims=" %%a in (test\_ah._ah) do ((attrib "test\%%a" +h|find "未重设">nul)&&(attrib "test\%%a" +h +s)||(attrib "test\%%a" +h))
  11. DEL test\_as._as
  12. DEL test\_ah._ah
  13. pause
复制代码


貌似WINDOWS就能简单实现..

TOP

如果是在不同分区间移动,move的工作方式也是先copy再del source的。用COPY或XCOPY不会影响速度。

如果是在同一分区移动,可以用vbs来move,正好vbs不能跨分区移动文件夹。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

如果没有创建Test目录,请把代码中'objFSO.CreateFolder(strFolder & "Test")前的'单引号去掉。
假设你的AAA目录在C盘,根据你的实际情况改变。
  1. strFolder = "C:\AAA\"
  2. Set objFSO = CreateObject("Scripting.FileSystemObject")
  3. Set objFolder = objFSO.GetFolder(strFolder)
  4. 'objFSO.CreateFolder(strFolder & "Test")
  5. Set colFiles = objFolder.Files
  6. For Each File In colFiles
  7.     If File.Name <> "xp.bak" Then
  8.         File.Move strFolder & "Test\"
  9.     End If
  10. Next
  11. Set colFolders = objFolder.SubFolders
  12. For Each Folder In colFolders
  13.     If Folder.Name <> "Test" Then
  14.         Folder.Move strFolder & "Test\"
  15.     End If
  16. Next
复制代码
(*^_^*)

TOP

谢谢bhsx,也谢谢keen,不过bhsx的方法好像有点繁锁了?我参考下,keen,能否不要用VBS,因为VBS我暂时还没编写过,我想听听大家的做法,MOVE是在同个分区里移动的。

TOP

有没有什么方法呢,用BAT方式

TOP

  1. REN AAA _.AAA
  2. MD AAA
  3. MOVE _.AAA AAA\TEST
  4. MOVE AAA\TEST\xp.bak AAA
复制代码

TOP

返回列表