2011-01-26 4 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 –

ответ

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

+0

Я до сих пор не могу заставить это работать без указанной выше ошибки (даже после ее модификации), есть ли что-то, что мне не хватает? – Saggio

Смежные вопросы