Batch file 在多台服务器上使用文件检查生成批处理文件
大家好 我的主管让我制作批处理文件,以检查多台服务器上存在的文件。任务是检查网络共享上是否存在文件(共享路径为“universal”,唯一的区别是服务器名)-\servername\share\tools 在我看来,它看起来像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
@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