В журнале командной строки с XCopy
-
24-10-2019 - |
Вопрос
У меня есть скрипт 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
Решение
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