Создание пакетного файла с проверкой файлов на нескольких серверах
Приветствую всех!
Мой начальник поручил мне создать пакетный файл для проверки существования файла на нескольких серверах. Задача - проверить наличие файла на общем сетевом ресурсе (путь к общему ресурсу "универсальный", единственное отличие - имя сервера) - \servername\share\tools.
По моим мыслям это выглядит так
@echo off
@echo %time%
FOR %%G IN (server1,server2,server3) DO (
:test
if exist "\\%%G\share\Tools\test1.txt" goto end
timeout /T 1
goto test
:end
@echo %time%
)
Но если спросить что-то о 50 серверах, мой мозг рухнет - это займет (на основе% времени% выхода) что-то около 0,02-0,1 секунды. Это нереально, потому что эти серверы из филиалов.
Где может быть моя ошибка и как мне исправить мой скрипт?
И еще один вопрос - как можно отметить время начала и окончания для каждого сервера в моем списке? Какую команду вывода я должен дать?
Заранее спасибо.
2 ответа
@echo off
setlocal enableextensions enabledelayedexpansion
(for %%s in (s1 s2 s3) do (
pushd \\%%s\share\Tools 2> nul
if errorlevel 1 (
echo !time! %%s can not be accessed
) else (
if exist test1.txt (
echo !time! %%s hold key file
) else (
echo !time! %%s does not hold key file
)
popd
)
)) > report.txt
Попробуйте некоторые из них:
@echo off
setlocal enableDelayedExpansion
set retries_limit=10
FOR %%G IN (server1,server2,server3) DO (
echo testing %%G
@echo %time%
for /l %%l in (1,1,%retries_limit%) do (
set "flag="
if exist "\\%%G\share\Tools\test1.txt" (
set "flag=1"
)
timeout /T 1
)
if defined flag echo %%G is ok else echo something wrong with %%G
@echo %time% end of %%G testing
)
endlocal
~
@echo off
setlocal enableDelayedExpansion
set retries_limit=10
FOR %%F "usebackq delims=" IN ("serverlist.txt") DO (
echo testing %%G
@echo %time%
for /l %%l in (1,1,%retries_limit%) do (
set "flag="
if exist "\\%%G\share\Tools\test1.txt" (
set "flag=1"
)
timeout /T 1
)
if defined flag echo %%G is ok else echo something wrong with %%G
@echo %time% end of %%G testing
)
endlocal
~
@echo off
setlocal enableDelayedExpansion
FOR %%F "usebackq delims=" IN ("serverlist.txt") DO (
echo testing %%G
@echo %time%
for /l %%l in (1,1,%retries_limit%) do (
set "flag="
if exist "\\%%G\share\Tools\test1.txt" (
set "flag=1"
)
timeout /T 1
)
if defined flag echo %%G is ok else echo something wrong with %%G
@echo %time% end of %%G testing
)
endlocal
:checker
setlocal enableDelayedExpansion
set retries_limit=10
@echo %time%
for /l %%l in (1,1,%retries_limit%) do (
set "flag="
if exist "\\%~1\share\Tools\test1.txt" (
set "flag=1" & goto :break_loop
)
timeout /T 1
)
:break_loop
if defined flag echo %%G is ok else echo something wrong with %%G
@echo %time% end of %%G testing
endlocal