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

[文件操作] 批处理如何在xcopy后输出所复制的目标文件路径?

我准备使用xcopy完成一次批量的复制工作,现在使用的代码是:
  1. xcopy /e/y "%cd%\Path" "%cd%"
复制代码

上述代码是要将“%cd%\Path”目录中所有文件(包括子目录及空格文件)一同复制到“%cd%”目录下面。

现在我想实现一个新功能。当我复制这些文件的时候,输出一个名为test.txt的文件,text文本文件中每行格式如下:
  1. del /f /s /q ..\..\..\********
复制代码

其中********表示在xcopy过程中目标文件的路径(相对路径)!

举个例子:

  1. xcopy /e/y "Temp\Bari\A.exe" "Bari\A.exe"
复制代码


上述语句中,输出的text文件应该输出如下一行:

  1. del /f /s /q ..\..\..\Bari\A.exe
复制代码

/f 复制时显示源文件名和目标文件名。

批处理中,利用xcopy的/f参数获取目标文件:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /F "tokens=2 delims=>" %%a in ('xcopy /csef "Temp\Bari\A.exe" "Bari\A.exe"') do set "a=%%a"&echo.del /f /s /q "!a:~1!")>test.txt
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-31 00:13 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

按照2楼的操作后,提示:不能进行循环复制

TOP

周期性复制错误是xcopy在初始化时检测到的一种语法错误,和使用不使用/f没有关系,也和for /f解析标准输出没有关系,即去掉for /f和xcopy的/f参数,周期性复制(循环复制)依然是存在的。
周期性复制(循环复制):xcopy在执行前,会对xcopy命令段语法进行检测,满足以下条件即为周期性复制:
1,使用子目录操作参数/s、/t、/e。
2,目标目录为源目录的某一级子目录。
同时存在以上两个条件时,即为周期性复制(循环复制),有以下特征:
1,返回错误代码为4
2,该错误信息不会被/c参数所屏蔽。
3,即使使用/l参数不执行实际的复制操作,周期性复制也是不允许的。
4,无论源和目标是文件还是目录,周期性复制都是不允许的。

ps:在xcopy的实际使用过程中,不适写成xcopy /csef "Temp\Bari\A.exe" "Bari\A.exe",因为这样容易造成xcopy请求确认并等待应答的。所以推荐写成xcopy /csef "Temp\Bari\A.exe" "Bari\"

[ 本帖最后由 hanyeguxing 于 2010-5-31 20:13 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

按照4楼的方法,问题基本解决了,但是如何实现是相对路径呢?

[ 本帖最后由 alpha 于 2010-5-31 20:35 编辑 ]

TOP

回复 5楼 的帖子

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /F "tokens=2 delims=>" %%a in ('xcopy /csefi "Temp\Bari\A.exe" "Bari"') do set a=%%a&set a=!a:%cd%\=!&echo.del /f /s /q ..\..\!a:~1!)>test.txt
复制代码
使用set替换删除,然后echo.根据自己的需要写。

[ 本帖最后由 hanyeguxing 于 2010-5-31 20:43 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

好的,问题已经解决,现在再问个附加的问题,6楼给的是5行代码,能否合并为一行?

TOP

批处理中:
  1. @echo off&setlocal enabledelayedexpansion&(for /F "tokens=2 delims=>" %%a in ('xcopy /csefi "Temp\Bari\A.exe" "Bari"') do set a=%%a&set a=!a:%cd%\=!&echo.del /f /s /q ..\..\!a:~1!)>test.txt
复制代码
cmd下或“运行”中:
  1. cmd /q /v:on /k "(for /F "tokens=2 delims=>" %%a in ('xcopy /csefi "D:\Temp\Bari\A.exe" "D:\Bari"') do set a=%%a&set a=!a:D:\=!&echo.del /f /s /q ..\..\!a:~1!)>D:\test.txt"
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

楼主的要求很苛刻啊。不过你说的要合为一行,用&也许可以合并,但不保证能用。你试试吧。
为啥要合并一行呢?

TOP

原帖由 xinje 于 2010-5-31 20:56 发表
楼主的要求很苛刻啊。不过你说的要合为一行,用&也许可以合并,但不保证能用。你试试吧。
为啥要合并一行呢?

我有一个软件,要想嵌入bat,必须合并为一行,实际上我也希望不麻烦大家

TOP

回复 10楼 的帖子

呵呵。把BAT编译成EXE吧。
转换成一行可以运行一些简单的命令。复杂的就不好说了。
我写的一个编译器,就存在这样的问题。

用&来连接命令。祝你好运。

还有,如果想写EXE文件,不如去学习一下编程,你所说的这些还是非常简单的,反而用批处理会复杂。
BAT2exe还是有太多局限性。加油兄弟。

TOP

回复 10楼 的帖子

那你为啥不在最开始发帖提问的时候就说清楚这个要求呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表