Board logo

标题: [文件操作] 批处理使用xcopy如何使其自动应答? [打印本页]

作者: alpha    时间: 2010-4-26 23:06     标题: 批处理使用xcopy如何使其自动应答?

我要使用xcopy命令,有没有什么办法能使bat自动应答。标况下,用xcopy /y 复制文件时,如果遇到相同文件需要覆盖时,他会提示出“目录 or 文件”让你选择,有人给出了 echo f|xcopy /y 语句进行自动应答,有没有别的办法,不用这种方法,也能实现的(类似于命令开关)。
      
请问如何实现?

[ 本帖最后由 alpha 于 2010-4-26 23:07 编辑 ]
作者: sgaizxt001    时间: 2010-4-27 00:09

我测试@xcopy /y s f:\s\ 时,点第一下,复制过去了,再点没提示,直接复制。只有在xcopy /y s f:\s,而且f:\下没有s文件夹的时候才提示目录 or 文件。这个时候我觉得还是提示要好一点,不然就在写xcopy的时候写清楚一点
作者: pdanniel66    时间: 2010-4-27 06:02

我都用以下指令,请参考
xcopy D:\DATA\Home H:\00_ASUS_NB_BKUP\D_Drive\data\Home /D/Q/E/I/C/Y
可以xcopy/? 看一下说明
作者: pdanniel66    时间: 2010-4-27 06:07

(1)使用xcopy适用在档案数与子目录树不多时,若子目录树太多,有时会xcopy不确实
(2)建议使用 robocopy, it has differential copy function too.
作者: GNU    时间: 2010-4-27 14:08     标题: 回复 4楼 的帖子

“有时会xcopy不确实”是什么意思?
作者: hanyeguxing    时间: 2010-4-27 17:00

原帖由 alpha 于 2010-4-26 23:06 发表
我要使用xcopy命令,有没有什么办法能使bat自动应答。标况下,用xcopy /y 复制文件时,如果遇到相同文件需要覆盖时,他会提示出“目录 or 文件”让你选择,有人给出了 echo f|xcopy /y 语句进行自动应答,有没有别的办法,不用这种方法,也能实现的(类似于命令开关)。
      
请问如何实现?

既然使用了/y,就不会出现覆盖提示,否则/y还有什么意义呢?所以“目录 or 文件”就不是覆盖提示。而且在批处理中使用xcopy,默认是覆盖的。
出现“目录 or 文件”是因为指向的目标不包含现有目录,且不以\结尾。
解决方法任选:
1,提前创建该目录
2,使用/i参数
3,目标目录以\结尾
作者: alpha    时间: 2010-4-27 17:28     标题: 这是我的那段代码,您帮忙看看(红色部分)

原帖由 hanyeguxing 于 2010-4-27 17:00 发表

既然使用了/y,就不会出现覆盖提示,否则/y还有什么意义呢?所以“目录 or 文件”就不是覆盖提示。而且在批处理中使用xcopy,默认是覆盖的。
出现“目录 or 文件”是因为指向的目标不包含现有目录,且不以\结尾。 ...


@echo off&setlocal enabledelayedexpansion
set "ph=%cd%\tmp\"
for /f "tokens=*" %%a in ('dir /s/b/a-d tmp\') do (
set xx=%%~a
for /f "tokens=*" %%b in ("!ph!") do set xx=!xx:%%b=!
if exist "%cd%\!xx!" echo f|xcopy /y "%cd%\!xx!" "%cd%\backup\123\!xx!"&echo "!xx!">>1.txt
)
xcopy /e/y "%cd%\tmp" "%cd%"
pause
作者: pdanniel66    时间: 2010-4-27 21:17

“有时会xcopy不确实”是什么意思?

我之前常用 xcopy 复制 PC 数据至U盘,Source Data有 50GB以上,目录与子目录也很多层,PC RAM有 2GB,会出现资源不足,即使使用 /D参数 (差异备份)但是也会资源不足,所以我说xcopy 不确实 (或许此说法有人认为不妥),我现在都用 robocopy

Robocopy 还提供 Log,可以告诉你备了哪些file , security access right 也可以copy过来 ( robocopy是微软提供的tool )。

以上是小弟的浅见 !
作者: GNU    时间: 2010-4-27 21:58     标题: 回复 8楼 的帖子

robocopy的某些功能确实比xcopy强大,不过XP系统没有自带这个命令,不如采用xcopy的可移植性好。
作者: alpha    时间: 2010-4-27 22:20     标题: 那麻烦大家能不能把下面的这段xcopy代码改为robocopy写成的?

  1. @echo off&setlocal enabledelayedexpansion
  2. set "ph=%cd%\tmp\"
  3. for /f "tokens=*" %%a in ('dir /s/b/a-d tmp\') do (
  4. set xx=%%~a
  5. for /f "tokens=*" %%b in ("!ph!") do set xx=!xx:%%b=!
  6. if exist "%cd%\!xx!" echo f|xcopy /y "%cd%\!xx!" "%cd%\backup\123\!xx!"&echo "!xx!">>1.txt
  7. )
  8. xcopy /e/y "%cd%\tmp" "%cd%"
  9. pause
复制代码


操作目的:

要将tmp目录下的所有文件(包括子目录)拷贝至当前目录,如果文件在复制过程中,如果遇到文件名相同的文件或文件夹(包括子目录),则先将原文件或文件夹(包括子目录)拷贝至本目录下的“backup\123”文件夹中,然后再进行覆盖复制。(上文所提到的“文件”均为无规则文件,而且包含大量含有空格的文件!
作者: hanyeguxing    时间: 2010-4-28 19:20

在批处理中,尽量使用D:\rec\这样的行尾加\来表示目录,这样可以避免发生很多问题




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2