2011-01-26 587 views
0

我有一个xcopy脚本,我正在运行它,它会读取包含目录和文件名的.csv文件并解析它以复制文件。使用xcopy命令提示符日志记录

这里的脚本:

echo F | for /f "delims=, tokens=1,2,3" %i in (D:\foo.csv) 
do xcopy /i /d "Z:\%i\%j\%k" "Y:\%i\%j\%k" >> "D:\xcopy\Log.txt" 

输出到命令提示符是正在执行的命令:

echo F | xcopy /i /d "Z:\hcri001\a1\ 
ffce5a14-33ca-43cf-b366-af266c450979" "Y:\hcri001\a1\ffce5a14-33ca-43cf-b366 
-af266c450979" 1>>"D:\xopy\Log.txt 

但是,日志只是有命令的输出:

0 File(s) copied 
0 File(s) copied 
0 File(s) copied 
Does Y:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3 specify a file name 
or directory name on the target 
(F = file, D = directory)? F 
Z:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3 
1 File(s) copied 

有没有办法同时执行这两个命令以及输出? 另外,有无论如何有我可以放在行首的某种计数器?

我的理想日志文件会在以下格式:

1) C:\Desktop>echo F | xcopy /i /d "Z:\hcri001\a7\ 
    00a62a73-d7a7-4cfb-b55c-457bc67b3647" "Y:\hcri001\a7\00a62a73-d7a7-4cfb-b55c 
    -457bc67b3647" 1>>"D:\Robocopy\AtlusPatient131172CopyLog.txt 
    0 File(s) copied 
    2) C:\Desktop>echo F | xcopy /i /d "Z:\hcri001\d5\ 
    003452354-d7a7-4cfb-452c-457bc67b3647" "Y:\hcri001\d5\003452354-d7a7-4cfb-452c-457bc67b3647" 1>>"D:\Robocopy\AtlusPatient131172CopyLog.txt 
    0 File(s) copied 
    3) C:\Desktop>echo F | xcopy /i /d "Z:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3" "Y:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3" 1>>"D:\Robocopy\AtlusPatient131172CopyLog.txt 
Does Y:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3 specify a file name 
     or directory name on the target 
     (F = file, D = directory)? F 
     Z:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3 
     1 File(s) copied 

和奖励积分,如果命令可以修剪只包括文件名,而不是整个命令即1) "Z:\hcri001\2d\545392db-50fa-40d9-aaa2-0892ca5057f3" 0 File(s) copied

+0

您是否尝试在脚本级别重定向,而不是脚本内部?我的意思是a.cmd >> log.txt – 2011-01-26 14:58:17

回答

1
for /f "delims=, tokens=1,2,3" %i in (D:\foo.csv) do (
    echo xcopy /i /d "Z:\%i\%j\%k" "Y:\%i\%j\%k" >> "D:\xcopy\Log.txt" 
    echo f | xcopy /i /d "Z:\%i\%j\%k" "Y:\%i\%j\%k" >> "D:\xcopy\Log.txt" 
) 

对于计数器,您需要SETLOCAL ENABLEEXTENSIONS,然后set counter=1 和循环内部set /a counter=!counter! + 1

+0

上面的代码给出了它尝试复制的每个图像的以下错误:进程无法访问文件,因为它正在被另一个进程使用。这是因为它试图将输出追加到日志文件,而它仍然在写入输入吗? – Saggio 2011-01-27 13:58:11