标题: [文件操作] 批处理如何在xcopy后输出所复制的目标文件路径? [打印本页]
作者: alpha 时间: 2010-5-30 22:07 标题: 批处理如何在xcopy后输出所复制的目标文件路径?
我准备使用xcopy完成一次批量的复制工作,现在使用的代码是:
- xcopy /e/y "%cd%\Path" "%cd%"
复制代码
上述代码是要将“%cd%\Path”目录中所有文件(包括子目录及空格文件)一同复制到“%cd%”目录下面。
现在我想实现一个新功能。当我复制这些文件的时候,输出一个名为test.txt的文件,text文本文件中每行格式如下:
- del /f /s /q ..\..\..\********
复制代码
其中********表示在xcopy过程中目标文件的路径(相对路径)!
举个例子:
- xcopy /e/y "Temp\Bari\A.exe" "Bari\A.exe"
复制代码
上述语句中,输出的text文件应该输出如下一行:
- del /f /s /q ..\..\..\Bari\A.exe
复制代码
作者: hanyeguxing 时间: 2010-5-30 23:51
批处理中,利用xcopy的/f参数获取目标文件:- @echo off&setlocal enabledelayedexpansion
- (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 编辑 ]
作者: alpha 时间: 2010-5-31 19:36
按照2楼的操作后,提示:不能进行循环复制
作者: hanyeguxing 时间: 2010-5-31 20:00
周期性复制错误是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 编辑 ]
作者: alpha 时间: 2010-5-31 20:29
按照4楼的方法,问题基本解决了,但是如何实现是相对路径呢?
[ 本帖最后由 alpha 于 2010-5-31 20:35 编辑 ]
作者: hanyeguxing 时间: 2010-5-31 20:40 标题: 回复 5楼 的帖子
- @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
复制代码
使用set替换删除,然后echo.根据自己的需要写。
[ 本帖最后由 hanyeguxing 于 2010-5-31 20:43 编辑 ]
作者: alpha 时间: 2010-5-31 20:49
好的,问题已经解决,现在再问个附加的问题,6楼给的是5行代码,能否合并为一行?
作者: hanyeguxing 时间: 2010-5-31 20:55
批处理中:- @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下或“运行”中:- 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"
复制代码
作者: xinje 时间: 2010-5-31 20:56
楼主的要求很苛刻啊。不过你说的要合为一行,用&也许可以合并,但不保证能用。你试试吧。
为啥要合并一行呢?
作者: alpha 时间: 2010-5-31 21:01
原帖由 xinje 于 2010-5-31 20:56 发表
楼主的要求很苛刻啊。不过你说的要合为一行,用&也许可以合并,但不保证能用。你试试吧。
为啥要合并一行呢?
我有一个软件,要想嵌入bat,必须合并为一行,实际上我也希望不麻烦大家
作者: xinje 时间: 2010-5-31 21:41 标题: 回复 10楼 的帖子
呵呵。把BAT编译成EXE吧。
转换成一行可以运行一些简单的命令。复杂的就不好说了。
我写的一个编译器,就存在这样的问题。
用&来连接命令。祝你好运。
还有,如果想写EXE文件,不如去学习一下编程,你所说的这些还是非常简单的,反而用批处理会复杂。
BAT2exe还是有太多局限性。加油兄弟。
作者: Batcher 时间: 2010-5-31 22:40 标题: 回复 10楼 的帖子
那你为啥不在最开始发帖提问的时候就说清楚这个要求呢?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |