Batch file If和Else语句

Batch 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

我发现脚本批处理中的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 "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)时调用
|
后面的代码