Войти

Показать полную графическую версию : Копирование файла в сеть


word_up@vk
22-05-2013, 19:54
Доброго времени суток. Требовалось создать *.bat файл, который осуществит копирование файла по всем компьютерам IP адреса которых есть в списке, вот какой код получился:
Код @Set Spisok=1.txt
@Set File=list.txt
@Set Shara=d$
@Set Log=D:\Spisoklog.txt

@Echo +++ >> "%Log%"
@Echo +++ %Date% %Time% ++++++++++++++++++++++++ >>"%Log%"
@Echo +++ >> "%Log%"

FOR /F "usebackq delims=" %%i IN ("%Spisok%") DO Call :CopyTo %%i
GoTo :Eof

:CopyTo
ping -n 1 %1 >nul

@if not %Errorlevel%==0 (
@ Echo --- Узел %1 не пингуется >> "%Log%"
@GoTo :Eof
)

Copy "%File%" "\\%1\%Shara%" >nul 1>nul 2>nul

if %Errorlevel%==0 echo +++ Успешно Copy "%File%" "\\%1\%Shara%" >> "%Log%"
if not %Errorlevel%==0 echo --- Не удалось Copy "%File%" "\\%1\%Shara%" >> "%Log%"


Список IP адресов хранится в файле 1.txt, файл который надо отправить list.txt, на каждом компьютере в сети расшарен диск D, ну и лог Spisoklog.txt...
Проблема в том, что не могу уже второй день найти ошибку, копирование не происходит и в лог-файл записывается отчёт, что копирования не произошло. Надеюсь свежий глаз заметит ошибку.

Georgio
22-05-2013, 21:40
Copy "%File%" "\\%1\%Shara%" >nul 1>nul 2>nul »

word_up@vk, зачем Вам столько "нулей"? Они, конечно, ошибку не вызывают, но системой в данном случае интерпретируется только >nul или 1>nul. Лучше перенаправьте выход в лог Copy "%File%" "\\%1\%Shara%" >>%Log% и выложите результат.

А другими BAT-файлами всё нормально копировалось по сети?

word_up@vk
22-05-2013, 22:04
Заменил строку, в Log файле выдало 0. и копирование всё равно не произошло

Foreigner
22-05-2013, 22:25
ping -n 1 %1 >nul »
Если 192.168.*.*, то errorlevel всегда будет 0.

ping -n 1 %1 | 1>nul findstr "TTL" || echo %1 не пингуется && goto:eof

word_up@vk
22-05-2013, 22:35
А другими BAT-файлами всё нормально копировалось по сети? »
а другими и не пробовал...

Iska
22-05-2013, 22:49
Не проверялось:
@echo off
setlocal enableextensions enabledelayedexpansion

set Spisok=1.txt
set File=list.txt
set Shara=d$
set Log=D:\Spisoklog.txt

>> "%Log%" (
echo +++
echo +++ %Date% %Time% ++++++++++++++++++++++++
echo +++
)

if exist "%Spisok%" (
if exist "%File%" (
for /f "usebackq delims=" %%i in ("%Spisok%") do call :CopyTo "%%~i"
) else (
echo Can't find [%File%].
)
) else (
echo Can't find [%Spisok%].
)

endlocal
exit /b 0

:CopyTo
ping.exe -n 1 %~1 | >nul find.exe /i "TTL=" && (
1>nul 2>"%Log%" copy "%File%" "\\%1\%Shara%" && (
echo +++ Успешно
) || (
echo --- Не удалось Copy "%File%" "\\%1\%Shara%"
)
) || echo --- Узел %~1 не пингуется >> "%Log%"

exit /b 0


но системой в данном случае интерпретируется только >nul или 1>nul. »
А «2>nul »?

Если 192.168.*.*, то errorlevel всегда будет 0. »
Почему?
E:\Песочница\0258>ping.exe 192.168.223.1 && echo 1 || echo 2

Обмен пакетами с 192.168.223.1 по 32 байт:

Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 192.168.223.1:
Пакетов: отправлено = 4, получено = 0, потеряно = 4 (100% потерь),
2

Foreigner
22-05-2013, 23:14
Почему? »
192.168.0.*
Почему не знаю

> ping -n 1 192.168.0.1 && echo 1 || echo 2

Обмен пакетами с 192.168.0.1 по с 32 байтами данных:
Ответ от 192.168.0.1: число байт=32 время=1мс TTL=64

Статистика Ping для 192.168.0.1:
Пакетов: отправлено = 1, получено = 1, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 1мсек, Максимальное = 1 мсек, Среднее = 1 мсек
1

> ping -n 1 192.168.0.2 && echo 1 || echo 2

Обмен пакетами с 192.168.0.2 по с 32 байтами данных:
Ответ от 192.168.0.103: Заданный узел недоступен.

Статистика Ping для 192.168.0.2:
Пакетов: отправлено = 1, получено = 1, потеряно = 0
(0% потерь)
1

Iska
23-05-2013, 00:08
Foreigner, это, случайно, не роутер Вам отвечает?




© OSzone.net 2001-2012