2016-08-07 14 views
1

Я хочу, чтобы скопировать конкретный файл с одной машины на 5 других машин, поэтому у меня есть сервер список файлов содержит IP-адреса каждой машины, как:NET USE несколько серверов копирования файлов

10.10.1.3 
10.10.1.4 
10.10.1.5 
10.10.1.6 
10.10.1.7 

в моем пакетном файле:

SET File=C:\Files\servers.txt 
SET User=user 
SET Password=pass 

     IF EXIST b:\ (
     NET USE b: /DELETE /Y 
    ) 

     FOR /F %%A IN (%File%) DO (
       START /WAIT NET USE b: \\%%A\C$\Temp /user:%User% %Password% 

       COPY C:\Logs\L1.log b:\L1.log /Y   

      IF EXIST b:\ (
        NET USE b: /DELETE /Y 
       ) 
     ) 

проблема в первом сервере, я получаю сообщение об ошибке: не удается найти указанный диск, но и для других серверов все работает отлично. Я думаю, что это что-то с NET USE, конечно, возможно, сеть карт удалена до завершения копирования?

Есть ли какой-либо путь в пакетном файле, чтобы зацикливать некоторые серверы, и для каждого из серверов открывать сетевые копии файлов карты до завершения копирования и перехода к следующему серверу?

EDIT:

У меня есть обновления для этой проблемы: машины-источника и целевой машина находится в разных доменах. У меня есть имя пользователя в качестве администратора в обеих машинах. Машины знают друг друга (я могу открыть целевую папку на исходном компьютере, например, \ server \ C $ \ temp, и я могу вставить все, что я там хочу)

Я попытался скопировать файлы без использования сети и просто скопировать из C: \ file.log \ server \ c $ \ temp \ file.log для каждого сервера (у меня 5), а для 3 серверов он работал, а у двух других - ошибка: сбой входа: неизвестное имя пользователя или неверный пароль

FOR /F %%A IN (%File%) DO (
     COPY C:\temp\file.log \\server\c$\temp\file.log /Y 
) 

В чем проблема?

Помогите? Благодарим вас за продвижение.

+0

Разве это не 'NET USE b:/DELETE: Y [ES]', а не 'NET USE b:/DELETE/Y'? – aschipfl

+0

Не нужно использовать команду start с командой net. Пакетные файлы являются последовательной обработкой. Следующая команда не будет выполняться до завершения предыдущей команды. – Squashman

+1

@aschipfl: это просто 'net use b:/delete' – Stephan

ответ

0

При использовании команды START вам нужно либо указать новое имя окна, либо оставить его пустым в двойных кавычках, если вы хотите, чтобы он запускался в том же открытом CMD-окне. Однако в этом конкретном случае вам не нужно использовать START. Попробуйте добавить тайм-аут для 1-го или всех подключений к серверу в списке:

IF EXIST b:\null NET USE b: /DELETE 
:: more code here 

NET USE b: \\%%A\C$\Temp /user:%User% %Password% 
if "%%A"=="10.10.1.3" timeout 5 >nul 
+3

В этом случае, зачем использовать 'start'? «NET USE» в порядке. –

+0

'/ DELETE: YES' генерирует синтаксическую ошибку. Это '/ delete' только. – Stephan

0

Лучше всего было бы, если пользователь/пароль совпадает на каждой машине (credientals совместно во всей области)

В том случай, нет необходимости NET USE, просто скопировать путь UNC непосредственно

FOR /F %%A IN (C:\Files\servers.txt) DO COPY /Y C:\Logs\L1.log \\%%A\C$\Temp\L1.log 

я понял, у вас есть проблемы на 2 машины из 5. вы не можете получить доступ к C $ напрямую, если вы не администратор машина.

Проверил:

  • домен (echo %USERDOMAIN% на удаленной машине): Все машины должны быть на том же домене, для его работы
  • ли вы администратором или не на удаленной машине, вы не можете установить диски с трюком C$, если вы не являетесь администратором.

Существует альтернативное решение для вас, если это не сработает:

Доля C:\TEMP (чтение/запись), как же имя экс: sharedtemp на 5 машин (или попросите администратора чтобы сделать это)

Затем адаптировать сценарий, как это:

FOR /F %%A IN (C:\Files\servers.txt) DO COPY /Y C:\Logs\L1.log \\%%A\sharedtemp\L1.log 

Даже если вы не являетесь администратором, вы будете иметь доступ к общему ресурсу, так.

+0

исходный компьютер находится в другом домене, чем машина назначения – user3132295