如果和其他声明

时间:2014-07-30 11:48:02

标签: batch-file

我在脚本批处理中遇到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
)

2 个答案:

答案 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