Создание пакетного файла с проверкой файлов на нескольких серверах

Приветствую всех!

Мой начальник поручил мне создать пакетный файл для проверки существования файла на нескольких серверах. Задача - проверить наличие файла на общем сетевом ресурсе (путь к общему ресурсу "универсальный", единственное отличие - имя сервера) - \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
Другие вопросы по тегам