标题: [文本处理] 批处理怎样将大量文件存放到新文件夹(同时备份目标文件)? [打印本页]
作者: purrpig 时间: 2011-3-16 12:05 标题: 批处理怎样将大量文件存放到新文件夹(同时备份目标文件)?
将一个文件夹:yyy…yyy\ ABC0_1100\xx\xx.xx(全部文件夹及子文件夹)
拷贝至:zzz…zzz\AB\C0\ABC0_1100\xx\xx\xx.xx(其中\AB\C0\ABC0_1100\这个不是一定的,只是配合拷贝源)
就是说,自动创建AB和C0文件夹。
文件名是不固定的,但是字符长度是固定的。如D:\Test\下,我有ABCD_0102、ABEF_0102、EFGH_0102、EFCD_0102四个文件夹,里面有很多文件夹及目录。
现在,我需要把这些文件夹移动到E:\Test\下,并依次创建各自匹配的文件夹放入AB\CD\ABCD_0102、AB\EF\ABEF_0102、EF\GH\EFGH_0102、EF\CD\EFCD_0102中。
因为需要每周都处理这些文件的转移,所以,可能涉及到备份的问题。
比如,我第一周复制了一次,目标文件夹:E:\Test\已经有了,但是为了防止文件丢失,出错,我想将要被覆盖的文件备份,比如备份到E:\Backup\文件夹下(包括文件的路径),请问这个功能可以实现么?
比如E:\Test\AB\CD\ABCD_0102\...\...\...\config.xml,只有config.xml这样一个文件重复了,我只想备份这一个文件到E:\Backup\AB\CD\ABCD_0102\...\...\...\下
希望大家不吝指教。
作者: hanyeguxing 时间: 2011-3-16 13:03
- @echo off&setlocal enableDelayedExpansion
- cd/d "D:\Test"
- for /d %%a in (*) do (
- set "a=%%a"
- xcopy /cqisekrh "%%a" "E:\Test\!a:~0,2!\!a:~2,2!\%%a"
- rd /s /q "%%a"
- )
复制代码
测试时不使用rd,测试正常且符合目的后再使用
xcopy的参数根据需要选择组合
[ 本帖最后由 hanyeguxing 于 2011-3-16 13:07 编辑 ]
作者: purrpig 时间: 2011-3-16 13:21
本帖最后由 purrpig 于 2011-3-22 09:55 编辑
现在有个情况,就是我运行第二次,即要覆盖的时候,dos下会问我,改写……(YES/NO/ALL),怎样改写成默认直接覆盖
这个已经改好了,谢谢版主,我现在希望的是,在覆盖之前,备份这些文件以及路径。到E:\Backup\下
作者: purrpig 时间: 2011-3-22 10:04
希望大家能帮助我下,谢谢
作者: 随风 时间: 2011-3-22 11:06
第一个问题
"E:\Test\!a:~0,2!\!a:~2,2!\%%a\"
第二个问题
xcopy /cqisekrh "E:\Test" "E:\Backup\"
作者: purrpig 时间: 2011-3-22 11:12
本帖最后由 purrpig 于 2011-3-22 11:18 编辑
5# 随风
不需要加判断语句么?比如我要拷过去的文件有A、B、C,目标文件夹有C、D、E了,但我只想备份C,因为文件太多太大了,如果都备份,可能没有那么多资源。
什么exist之类的?
我现在大致样子是
@echo off&setlocal enableDelayedExpansion
cd/d "D:\Test"
for /d %%a in (*) do (
set "a=%%a"
for /f %%i in () do set num=%%i ///////就是这里条件语句不知道怎么加,不知道怎么判断文件是否一样
if %num% GEQ 1 goto planA
if %num% LESS 1 goto planB
:planA
xcopy /c/q/i/s/e/k/r/h/y "%%b" "E:\Backup\%%b"
xcopy /c/q/i/s/e/k/r/h/y "%%a" "E:\Test\!a:~0,2!\!a:~2,2!\%%a"
goto end
:planB
xcopy /c/q/i/s/e/k/r/h/y "%%a" "E:\Test\!a:~0,2!\!a:~2,2!\%%a"
goto end
:end
pause
exit
)
作者: 随风 时间: 2011-3-22 11:23
运行 xcopy /? 看帮助
/D:m-d-y 复制在指定日期或指定日期以后更改的文件。
如果没有提供日期,只复制那些源时间比目标时间新的文件。
作者: hbwazxf 时间: 2011-3-22 11:27
新手学习一下。
作者: purrpig 时间: 2011-3-22 13:05
运行 xcopy /? 看帮助
/D:m-d-y 复制在指定日期或指定日期以后更改的文件。
如果没有提供日期,只复制那些源时间比目标时间新的文件。
随风 发表于 2011-3-22 11:23
/D:m-d-y 只是对源文件进行删选,我现在的情况是,对源文件不做判断,对目标文件夹的文件做判断,如果有名字一样的,直接备份。然后,源文件覆盖掉。
作者: caruko 时间: 2011-3-22 13:30
xcopy /U 只复制已经存在于目标中的文件。:: 符合你的要求
xcopy /L 显示要复制的文件。 ::这表示不是真的复制文件,只是显示出,如果复制将会复制那些文件。
xcopy /l /u "源" "目标" ,也可以加上/d,只复制源文件比目标文件新的文件,可节省时间。
显示出来的,即是需要备份的文件。
作者: purrpig 时间: 2011-3-22 13:39
本帖最后由 purrpig 于 2011-3-22 13:42 编辑
xcopy /U 只复制已嬖谟谀勘曛械奈募?: 符合你的要求
xcopy /L 显示要复制的文件。 ::这表示不是真的复制文件,只是显示出,如果复制将会复制那些文件。
xcopy /l /u "源" "目标" ,也 ...
caruko 发表于 2011-3-22 13:30
我不知道是不是我表达问题还是什么,我现在想要的情况是:
现在我在D:\Test\ABCD\...\...\...\下有1.txt、2.txt、3.txt这三个文件
在E:\Test\AB\CD\ABCD\...\...\...\下有3.txt、4.txt、5.txt这三个文件
我现在要达到的效果是,1.txt、2.txt、3.txt这三个文件复制到E:\Test\AB\CD\ABCD\...\...\...\并覆盖掉E盘下的3.txt文件(无论D盘的3.txt新旧、大小),并备份先前的E盘原有的3.txt到E:\Backup\日期\AB\CD\ABCD\...\...\...\(“日期”这一文件夹能自动生成么? 路径需要自己创建,并保持与E:Test后面一致)
作者: caruko 时间: 2011-3-22 13:49
备份- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%f in ('xcopy /L /U /D /F "源" "目标"') do (
- set "cp=%%f:->=◆"
- for /f "tokens=2 delims=◆" %%a in ("!cp!") do copy /y "%%a" "备份目录"
- )
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |