Ведение журнала командной строки с помощью xcopy - PullRequest
1 голос
/ 26 января 2011

У меня запущен скрипт 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

1 Ответ

2 голосов
/ 27 января 2011
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

...