Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Копирование файла в сеть (http://forum.oszone.net/showthread.php?t=261044)

word_up@vk 22-05-2013 19:54 2154207

Копирование файла в сеть
 
Вложений: 1
Доброго времени суток. Требовалось создать *.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 2154262

Цитата:

Цитата word_up@vk
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 2154283

Заменил строку, в Log файле выдало 0. и копирование всё равно не произошло

Foreigner 22-05-2013 22:25 2154298

Цитата:

Цитата word_up@vk
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 2154304

Цитата:

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

а другими и не пробовал...

Iska 22-05-2013 22:49 2154318

Не проверялось:
читать дальше »
Код:

@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



Цитата:

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

А «2>nul »?


Цитата:

Цитата Foreigner
Если 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 2154341

Цитата:

Цитата Iska
Почему? »

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 2154382

Foreigner, это, случайно, не роутер Вам отвечает?


Время: 22:44.

Время: 22:44.
© OSzone.net 2001-