Ir ao conteúdo

Posts recomendados

Postado

     Estou montando um arquivo BAT que contém uma instrução IF que, de acordo com uma condição, ela executa dois comandos. A linha, que com uma condição funciona normalmente, é a seguinte:

 

IF /I "%1" == "CI" (SET StatusInstrucao= & SET DescAcao=Start) ELSE (SET StatusInstrucao=/u & SET DescAcao=Stop) 

 

     Preciso acrescentar outras duas condições similares (mas opostas entre si) nessa instrução que são SI (parecida com a CI) e SP. Tentei a instrução abaixo para não ficar digitando várias linhas praticamente iguais:

 

IF /I "%1" == "CI" OR "%1" == "SI" (SET StatusInstrucao= & SET DescAcao=Start) ELSE (SET StatusInstrucao=/u & SET DescAcao=Stop) 

 

     Não dá erro na execução do BAT mas não são atribuídas as variáveis quando passo ao BAT a opção SI. Já coloquei as condições entre () uma a uma ou as duas juntas. O IF não aceita o OR ou AND para quando se tem mais de uma condição?

 

Postado

Esses são os operadores que o IF aceita:

 

EQU - igual
NEQ - diferente
LSS - menor que
LEQ - menor que ou igual
GTR - maior que
GEQ - maior que ou igual

 

 

IF /I "%1" == "CI" (SET StatusInstrucao= & SET DescAcao=Start)
IF /I "%1" == "SI" (SET StatusInstrucao= & SET DescAcao=Start
) ELSE (
SET StatusInstrucao=/u & SET DescAcao=Stop
) 

 

Postado

A minha intenção era evitar ter que ficar reescrevendo IFs para várias condições. Se, por acaso, precisar acrescentar outros 50 valores semelhantes ao CI teria que acrescentar 50 linhas no BAT.

Postado

Acredito que poderia usar um instrução for incluindo todos condições adicionais CI se SI entre aspas no FOR:

 

For %%a in (CI SI) do (IF /I "%1" == "%%a" (SET StatusInstrucao= & SET DescAcao=Start
) ELSE (
SET StatusInstrucao=/u & SET DescAcao=Stop)
)

 

Postado

Olá Ricardo,

 

     A opção do FOR funcionou legal. Tentei fazer uma adaptação dela e coloquei uns ECHOs para verificar se estava mostrando o processo correto, mas o layout que fiz deu erro logo no começo (mostrou as variáveis até o primeiro PAUSE, mostrando a tela abaixo:

 

Etapa inicial

Passagem de parametros
======================
     Acao ................:
     Ambiente ............:

Variaveis fixas
======================
     chrAspas ............: "
     CamComponentesP .....: C:\Projetos\Prodesp - FPagto - E-Folha\3 - Especificação e Desenvolvimento\3.Fonte\Componentes\
     CamComponentesE .....: C:\Projetos\Prodesp - FPagto - E-Folha\3 - Especificação e Desenvolvimento\3.Fonte\Web\DLL\

Variaveis carregadas de acordo com a acao
=========================================
     StatusInstrucao .....:
     Start_Stop_IIS_Status:
     DescAcao ............:
     Start_Stop_IIS_Codido:
     CodAmbiente .........:
Pressione qualquer tecla para continuar. . .
carregar foi inesperado neste momento.

 

 

     O BAT que estou fazendo é para 4 opções de ação:

 

SI => Somente para Inicializar o IIS;

CI => Carregar (registrar) algumas DLLs e Inicializar o IIS;

SP => Somente para Parar o IIS;

PD => Parar o IIS e descarregar (desregistrar) as mesmas DLLs.

 

 

     Segue o bloco que deve identificar a ação selecionada (se não passo nenhum parâmetro, mostra-se uma tela com as opções) , atribuir valores a algumas variáveis e, conforme o caso, direcionar o processo para alguma LABEL:

 

 

  echo Etapa inicial
  echo.
  echo Passagem de parametros
  echo ======================
  echo      Acao ................: %1
  echo      Ambiente ............: %2
  echo.
  echo Variaveis fixas
  echo ======================
  echo      chrAspas ............: %chrAspas%
  echo      CamComponentesP .....: %CamComponentesP%
  echo      CamComponentesE .....: %CamComponentesE%
  echo.
  echo Variaveis carregadas de acordo com a acao
  echo =========================================
  echo      StatusInstrucao .....: %StatusInstrucao%
  echo      Start_Stop_IIS_Status: %Start_Stop_IIS_Status%
  echo      DescAcao ............: %DescAcao%
  echo      Start_Stop_IIS_Codido: %Start_Stop_IIS_Codigo%
  echo      CodAmbiente .........: %CodAmbiente%
  pause

  IF /I "%1" == "" (
    ECHO Parametro da acao nao informado
    echo ===============================
    echo.
    SET
    echo.
    echo Sera aberta a janela para escolher a acao
    echo.
    echo.
    pause
    GOTO Start_Stop_IIS_Vazio
    ) ELSE (
        SET Start_Stop_IIS_Codigo=%1
        echo Parametro da acao informado
        echo ===========================
        echo.
        echo Passado: %1 - Variavel carregada: %Start_Stop_IIS_Codigo%
        echo.
        SET
        echo.
        echo Serao carregadas as variaveis para identificar instrucao para (des)carregar DLLs e a descricao da acao (start/stop)
        echo.
        echo.
        pause
        FOR %%a IN (CI SI) DO (
          IF /I "%1" == "%%a" (
            SET StatusInstrucao=
            SET DescAcao=Start
            echo Parametro da acao para inicializar o IIS escolhido
            echo ==================================================
            echo.
            echo O valor e o: %%a (SI: so inicia e CI: carrega DLLs e inicia)
            echo.
            SET
            echo.
            echo Se for so inicializar vai direto para a instrucao no final (ultima), caso contrario inicia e carrega DLLs
            echo.
            echo.
            pause
            ) ELSE (
                SET StatusInstrucao=/u
                SET DescAcao=Stop
                echo Parametro da acao para finalizar o IIS escolhido
                echo ================================================
                echo.
                echo O valor e o: %%a (SP: so finaliza e PD: descarrega DLLs e finaliza)
                echo.
                SET
                echo.
                echo Se for so finalizar vai direto para a instrucao no final (ultima), caso contrario descarrega DLLs e finaliza
                echo.
                echo.
                pause
                )
          )
          echo Variaveis que identificaram a acao
          echo ==================================
          echo.
          echo StatusInstrucao: %StatusInstrucao%
          echo DescAcao ......: %DescAcao%
          echo.
          pause
        )
        FOR %%b IN (SI SP) DO (
          IF /I "%1" == "%%b" (
            echo A acao (%%b) e somente para %DescAcao% e ira somente executar o programa IISReset com o parametro /%DescAcao%
            echo.
            echo.
            GOTO AcaoUnica
          )
        )
  IF /I "%2" == "" (GOTO AmbienteVazio) ELSE (SET CodAmbiente=%2)
  SET Start_Stop_IIS_Status=OK
 

 

     Essa estrutura está com algum erro? Obrigado pela atenção

 

 

 

 

adicionado 55 minutos depois

Olá Ricardo,

 

     O problema era os (), a mais que coloquei nos ECHOs, aparentemente funcionou, mas deu erro em outra parte, talvez o posicionamento do último FOR. Vou fazer outras mudanças e aviso. Obrigado.

Postado

Escolhendo a opção SI (Inicializar somente o IIS) entra na opção PD (Finalizar o IIS e descarrega as DLLs). Alterei o BAT usando vários IFs para a variável %1, ele executa certo quando escolho a opção SP, mas quando chega no final, em vez de finalizar carrega tela para escolher o ambiente e executa novamente.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!