【问题标题】:Command prompt logging with xcopy使用 xcopy 进行命令提示符日志记录
【发布时间】:2011-01-26 14:33:26
【问题描述】:

我有一个正在运行的 xcopy 脚本,它读取一个包含目录和文件名的 .csv 文件,并对其进行解析以复制文件。

这是脚本:

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

,则可以加分

【问题讨论】:

  • 您是否尝试在脚本级别而不是在脚本内部进行重定向?我的意思是 a.cmd >> log.txt

标签: windows command-line dos xcopy


【解决方案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

【讨论】:

  • 对于它尝试复制的每个图像,上面给了我以下错误:该进程无法访问该文件,因为它正在被另一个进程使用。是因为它试图将输出附加到日志文件,而它仍在向它写入输入吗?
  • 我似乎仍然无法在没有上述错误的情况下运行它(即使在稍微修改之后),我还缺少什么吗?
猜你喜欢
  • 2013-02-07
  • 1970-01-01
  • 2012-05-11
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多