Batch file If和Else语句
我发现脚本批处理中的if和else语句有问题。 以下是我的脚本: MainBatch file If和Else语句,batch-file,Batch File,我发现脚本批处理中的if和else语句有问题。 以下是我的脚本: Main @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
@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
我是巴西人,代码的文本是葡萄牙语。
错误发生在一个“else”中,我相信问题在于语法。
谢谢,很抱歉英语不好
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
)
您遇到以下问题:无法使用
goto
跳转到for
循环中的某个点,计数器的逻辑错误(跳过一台机器),变量的延迟扩展(读取)和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
在copiaScript.bat
中,您有这一行,但调用此批处理文件的代码没有传递%1
参数-因此此变量将始终为空
set estacao=%1
顺便说一句,您遇到了什么错误?C:\Script\Apri\SITDF\2.4.12>setlocal ENABLEDELAYEDEXPANSION else(foi inesperado neste momento.C:\Script\Apri\SITDF\2.4.12>)else(翻译…else(此时是意外的。调用循环时?如果未定义错误
(以前没有代码将其设置为1),调用copiascript.bat
。语法命令&&code on success | | code on failure
在某种程度上等同于如果不是errorlevel 1()else()
。在这种情况下,在前一个命令失败(errorlevel不是0)时调用|
后面的代码