Board logo

标题: [文件操作] 批处理备份文件时如何把已存在的文件复制到指定目录? [打印本页]

作者: alpha    时间: 2010-2-14 11:48     标题: 批处理备份文件时如何把已存在的文件复制到指定目录?

当在执行Copy命令时,如果发现文件已经存在,则先将源文件备份到backup目录中,然后再进行Copy的覆盖工作, 请问代码应该加在什么地方,添加什么代码?

[ 本帖最后由 alpha 于 2010-2-19 18:09 编辑 ]
作者: sysplay    时间: 2010-2-14 20:50

  1. ::通过if exist 判断是否存在a.txt,存在就复制到backup文件夹
  2. if exist a.txt copy a.txt backup\
  3. ::下面的命令反正是要执行的
  4. copy /y a.txt b\
复制代码

作者: alpha    时间: 2010-2-14 23:08

是这样一个情况,我需要覆盖的文件特别的多,能不能用类似什么*.*之类的字符表示,
另外,我的目的是要从123目录中拷贝文件到b目录(注意:123目录与b目录为同级目录),如果遇到相同的文件则先将文件备份至backup目录中(会有很多相同的文件要被覆盖),然后正常拷贝。
作者: more    时间: 2010-2-16 22:21

如果显示符合要求,把echo.去掉即可实现...
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /b /a-d "123\*.*"') do (
  3.   if exist "b\%%~nxa" (
  4.     echo.copy /y "%%a" backup\
  5.     echo.copy /y "%%a" b\
  6.     echo.
  7.   )
  8. )
  9. pause
复制代码

作者: xieqingx    时间: 2010-2-17 19:55

楼上的兄弟提供的代码是判断b与123中是否有相同的文件存在

  针对性的完整代码如下
  从123目录中拷贝文件到b目录(123目录与b目录为同级目录),如果遇到相同的文件则先将b中的文件备份至backup目录中,然后把123中的所有文件正常拷入b目录中。
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /b /a-d "123\*.*"') do (
  3.   if exist "b\%%~nxa" (
  4.     copy /y "b\%%~nxa" bakup\ >nul
  5.    )
  6. )
  7. copy /y  123\*.* b\ >nul
  8. 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