标题: [文件操作] 批处理备份文件时如何把已存在的文件复制到指定目录? [打印本页]
作者: alpha 时间: 2010-2-14 11:48 标题: 批处理备份文件时如何把已存在的文件复制到指定目录?
当在执行Copy命令时,如果发现文件已经存在,则先将源文件备份到backup目录中,然后再进行Copy的覆盖工作, 请问代码应该加在什么地方,添加什么代码?
[ 本帖最后由 alpha 于 2010-2-19 18:09 编辑 ]
作者: sysplay 时间: 2010-2-14 20:50
-
- ::通过if exist 判断是否存在a.txt,存在就复制到backup文件夹
- if exist a.txt copy a.txt backup\
- ::下面的命令反正是要执行的
- copy /y a.txt b\
复制代码
作者: alpha 时间: 2010-2-14 23:08
是这样一个情况,我需要覆盖的文件特别的多,能不能用类似什么*.*之类的字符表示,
另外,我的目的是要从123目录中拷贝文件到b目录(注意:123目录与b目录为同级目录),如果遇到相同的文件则先将文件备份至backup目录中(会有很多相同的文件要被覆盖),然后正常拷贝。
作者: more 时间: 2010-2-16 22:21
如果显示符合要求,把echo.去掉即可实现...- @echo off
- for /f "delims=" %%a in ('dir /s /b /a-d "123\*.*"') do (
- if exist "b\%%~nxa" (
- echo.copy /y "%%a" backup\
- echo.copy /y "%%a" b\
- echo.
- )
- )
- pause
复制代码
作者: xieqingx 时间: 2010-2-17 19:55
楼上的兄弟提供的代码是判断b与123中是否有相同的文件存在
针对性的完整代码如下
从123目录中拷贝文件到b目录(123目录与b目录为同级目录),如果遇到相同的文件则先将b中的文件备份至backup目录中,然后把123中的所有文件正常拷入b目录中。
-
- @echo off
- for /f "delims=" %%a in ('dir /s /b /a-d "123\*.*"') do (
- if exist "b\%%~nxa" (
- copy /y "b\%%~nxa" bakup\ >nul
- )
- )
- copy /y 123\*.* b\ >nul
- exit
复制代码
作者: alpha 时间: 2010-2-19 15:32
楼上两位给的代码不行啊,不起作用,另外,如果要备份的文件包含子目录或者含有空格怎么办呢?
作者: alpha 时间: 2010-2-26 21:56
有没有人知道啊!!!
作者: BatCoder 时间: 2010-2-26 22:06
4楼的代码运行之后显示的结果是什么?
作者: alpha 时间: 2010-2-27 21:46
原帖由 BatCoder 于 2010-2-26 22:06 发表
4楼的代码运行之后显示的结果是什么?
运行时,没有错误显示,但是却没有效果,没做任何操作
作者: BatCoder 时间: 2010-2-27 22:02 标题: 回复 9楼 的帖子
是任何显示都没有吗?
作者: alpha 时间: 2010-2-28 10:53
原帖由 BatCoder 于 2010-2-27 22:02 发表
是任何显示都没有吗?
是的,什么都没有
作者: BatCoder 时间: 2010-2-28 11:33
把"123\*.*"换成你需要备份的文件夹的绝对路径
作者: alpha 时间: 2010-2-28 14:49
原帖由 BatCoder 于 2010-2-28 11:33 发表
把"123\*.*"换成你需要备份的文件夹的绝对路径
还是不行
作者: BatCoder 时间: 2010-2-28 17:51
请把你修改之后的代码、待备份的目录结构截图上来看看。
作者: alpha 时间: 2010-2-28 21:54
原帖由 BatCoder 于 2010-2-28 17:51 发表
请把你修改之后的代码、待备份的目录结构截图上来看看。
您的意思是说,您测试成功了?
哦对了,我的目录里面包含子文件夹和空格文件名
作者: BatCoder 时间: 2010-3-1 09:24
我的意思是,我在帮你解决问题,请你提供足够的信息。
作者: hkzhc 时间: 2010-3-1 15:33 标题: 回复 1楼 的帖子
dir /b 123 >>d:\123.txt
for /f %%i in (d:\123.txt) do move ..\b\%%i ..\backup\
::然后再使用copy 命令即可
copy 123\*.* backup\
看看这段代码行不?路径要写好就ok 了
[ 本帖最后由 hkzhc 于 2010-3-1 15:39 编辑 ]
作者: alpha 时间: 2010-3-1 17:43
原帖由 BatCoder 于 2010-3-1 09:24 发表
我的意思是,我在帮你解决问题,请你提供足够的信息。
绝对路径也不行。您看看还会是什么问题导致的
作者: hkzhc 时间: 2010-3-2 09:16 标题: 修改17楼的
echo off
echo.
echo. 输入你所要复制原文件的绝对路径,如若要复制c盘1文件夹里的所有txt文件那么就输入:c:\1\*.txt
set /p yuanwj= :
echo.
echo. 输入你复制文件所存放的的绝对路径,如若要存到c盘1文件夹里那么就输入:c:\1\
echo.
set /p mdml= :
echo.
echo. 输入你的备份目录的绝对路径,如c:\1\
echo.
set /p pf= :
cls
if exist d:\1.txt ren d:\1.txt 111.txt
dir /b %yuanwj%>>d:\1.txt
for /f %%i in (d:\1.txt) do if exist %mdml%%%i move %mdml%%%i %pf%
copy %yuanwj% %mdml%
del d:\1.txt
if exist d:\111.txt ren d:\111.txt 1.txt
echo. 复制成功!
pause>nul
作者: alpha 时间: 2010-3-3 22:28
原帖由 hkzhc 于 2010-3-2 09:16 发表
echo off
echo.
echo. 输入你所要复制原文件的绝对路径,如若要复制c盘1文件夹里的所有txt文件那么就输入:c:\1\*.txt
set /p yuanwj= :
echo.
echo. 输入你复制文件所存放的的绝对路径,如若要存到c盘1 ...
测试通过,但是回到我起初的问题;
1、使用相对路径;
2、有很多不规范的文件要做备份;
3、包含子目录与空格文件名。
怎么修改
作者: hkzhc 时间: 2010-3-4 09:57 标题: 回复 20楼 的帖子
1,相对路径,你可以事先用set 定义一个相对路径,然后知道 ".."是上级目录 "."是本级目录即可
2,这里说的*.txt不一定是固定的,你可以用*.*代替,具体的看情况
3,有空格的话可以将这句for /f %%i in (d:\1.txt) do if exist %mdml%%%i move %mdml%%%i %pf%改为
for /f "delims=" %%i in (d:\1.txt) do if exist %mdml%"%%i" move %mdml%"%%i" %pf%
然后再试试看
再就是 copy 可以适当的改为 xcopy ,xcopy 的命令可以看帮助即可
[ 本帖最后由 hkzhc 于 2010-3-4 10:00 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |