Batch file 在多台服务器上使用文件检查生成批处理文件

Batch file 在多台服务器上使用文件检查生成批处理文件,batch-file,Batch File,大家好 我的主管让我制作批处理文件,以检查多台服务器上存在的文件。任务是检查网络共享上是否存在文件(共享路径为“universal”,唯一的区别是服务器名)-\servername\share\tools 在我看来,它看起来像 @echo off @echo %time% FOR %%G IN (server1,server2,server3) DO ( :test if exist "\\%%G\share\Tools\test1.txt" goto end timeo

大家好

我的主管让我制作批处理文件,以检查多台服务器上存在的文件。任务是检查网络共享上是否存在文件(共享路径为“universal”,唯一的区别是服务器名)-\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秒(基于%时间%输出)。这是不真实的,因为这些服务器来自分支机构

我的错误在哪里?我应该如何更正我的脚本

另一个问题是-如何标记列表中每个服务器的开始和结束时间?我应该给出什么输出命令

提前感谢。

试试以下几点:

@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
~

~


不能在
中为
使用
goto
。它会中断上下文。
@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
@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