我在脚本批处理中遇到if和else语句的问题。 这是我的脚本:
主要
@echo on
:varIniciais
set dia=%date:~0,2%%date:~3,2%%date:~-4%
set hora=%time:~0,2%%time:~3,2%
cd C:\Script\Apri\SITDF\2.4.12
set local=%cd%
set /a cont=1
setlocal ENABLEDELAYEDEXPANSION
:capturaMaquinas
for /f "tokens=1 usebackq" %%i in (maquina.txt) do (
:verificaContador
set estacao=%%i
if %cont% LEQ 30 (
call testaRede.bat
if %errorlevel% EQU 0 (
call copiaScript.bat
if %errorlevel% EQU 0 (
call permissaoScript.bat
if %errorlevel% EQU 0 (
echo ---------------------------------- >> "%local%\Logs\monitora %dia% %hora%.log"
echo %estacao% >> "%local%\Logs\monitora %dia% %hora%.log"
echo Copia realizado com sucesso >> "%local%\Logs\monitora %dia% %hora%.log"
)else(
echo ---------------------------------- >> "%local%\Logs\monitora %dia% %hora%.log"
echo %estacao% >> "%local%\Logs\monitora %dia% %hora%.log"
echo Erro ao liberar permissão no script >> "%local%\Logs\monitora %dia% %hora%.log"
)
)else(
echo ---------------------------------- >> "%local%\Logs\monitora %dia% %hora%.log"
echo %estacao% >> "%local%\Logs\monitora %dia% %hora%.log"
echo Erro ao realizar a copia do script >> "%local%\Logs\monitora %dia% %hora%.log"
)
)else(
echo ---------------------------------- >> "%local%\Logs\monitora %dia% %hora%.log"
echo %estacao% >> "%local%\Logs\monitora %dia% %hora%.log"
echo Estação não está respondendo na rede >> "%local%\Logs\monitora %dia% %hora%.log"
)
set /a cont+=1
)else(
sleep 12
set /a cont=1
goto verificaContador
)
)
endlocal
我是巴西人,我的代码文本是葡萄牙语。 错误发生在一个“其他”,我相信问题是语法。 谢谢,对不好的英语抱歉。
MC ND或其他人,
我什么时候能得到这个循环?
if not defined errors call copiaScript.bat || (
>> "%logFile%" echo ----------------------------------
>> "%logFile%" echo !estacao!
>> "%logFile%" echo Erro ao realizar a copia do script
set "errors=1"
)
copiaScript.bat
@echo on
:varIniciais
set estacao=%1
cd C:\Script\Apri\SITDF\2.4.12
:copiaScript
pscp -pw estacaolivredebian Script_Geral_v3.1.sh caixa@%estacao%:/home/caixa
if %errorlevel% EQU 0 (
exit /b 0
) else (
exit /b 1
)
答案 0 :(得分:1)
你有问题:你不能使用goto
跳转到for
循环内的一个点,计数器的逻辑是错误的(跳过一台机器),变量的延迟扩展(阅读here)和else
的语法(需要空格)。
这不是经过测试的代码,但可以用作起点
@echo on
setlocal ENABLEDELAYEDEXPANSION
set "dia=%date:~0,2%%date:~3,2%%date:~-4%"
set "hora=%time:~0,2%%time:~3,2%"
cd "C:\Script\Apri\SITDF\2.4.12"
set "local=%cd%"
set "logFile=%local%\Logs\monitora %dia% %hora%.log"
set /a "cont=0"
for /f "tokens=1" %%i in (maquina.txt) do (
set "estacao=%%i"
set "errors="
call testaRede.bat || (
>> "%logFile%" echo ----------------------------------
>> "%logFile%" echo !estacao!
>> "%logFile%" echo Estação não está respondendo na rede
set "errors=1"
)
if not defined errors call copiaScript.bat || (
>> "%logFile%" echo ----------------------------------
>> "%logFile%" echo !estacao!
>> "%logFile%" echo Erro ao realizar a copia do script
set "errors=1"
)
if not defined errors call permissaoScript.bat || (
>> "%logFile%" echo ----------------------------------
>> "%logFile%" echo !estacao!
>> "%logFile%" echo Erro ao liberar permissão no script
set "errors=1"
)
if not defined errors (
>> "%logFile%" echo ----------------------------------
>> "%logFile%" echo !estacao!
>> "%logFile%" echo Copia realizado com sucesso
) else (
echo !estacao! FAILED
)
set /a "cont+=1"
if !cont! GEQ 30 (
sleep 12
set "cont=0"
)
)
endlocal
答案 1 :(得分:0)
在copiaScript.bat
中你有这一行,但调用这个批处理文件的代码没有传递%1
参数 - 所以这个变量总是为空。
set estacao=%1