Tudo sobre batch: Apostilas, programas, dicas e tutoriais.

5 de jan. de 2009

If


If

O comando realiza processamento condicional em programas em lotes.

Sintaxe

if [noterrorlevel Número Comando [else Expressão]
if [notSeqüência1==Comando da Seqüência2 [else Expressão]
if [notexist Nome_de_Arquivo Comando [else Expressão]
Se as extensões de comando estiverem ativadas, use a seguinte sintaxe:
if [/iSeqüência1 Operador_de_Comparação Seqüência2 Comando [else Expressão]
if cmdextversion Número Comando [else Expressão]
if defined Variável Comando [else Expressão]

Parâmetros

not
Especifica que o comando só deve ser executado se a condição anterior for falsa.
errorlevel Número
Especifica uma condição verdadeira somente se o programa executado anteriormente por Cmd.exe tiver apresentado um código de saída igual ou superior aNúmero.
Comando
Especifica o comando que deve ser executado se a condição anterior for atendida.
Seqüência1 == Seqüência2
Especifica uma condição verdadeira somente se Seqüência1 e Seqüência2 forem iguais. Esses valores podem ser seqüências literais ou variáveis em lotes (%1, por exemplo). Não é necessário delimitar as seqüências de caracteres literais com aspas.
exist Nome_do_Arquivo
Especifica uma condição verdadeira, se Nome_do_Arquivo existir.
operador_de_comparação
Especifica um operador de comparação com três letras. A tabela a seguir lista os valores válidos para Operador_de_Comparação.

 

OperadorDescrição
EQU
igual a
NEQ
diferente de
LSS
menor que
LEQ
menor ou igual a
GTR
maior que
GEQ
maior ou igual a
/i
Força as comparações de seqüências de caracteres a ignorar maiúsculas e minúsculas. Você pode usar /i na forma Seqüência1==Seqüência2 de if. Essas comparações são genéricas, ou seja, se tanto Seqüência1 quanto Seqüência2 forem constituídas de dígitos numéricos, as seqüências serão convertidas em números e uma comparação numérica será realizada.
cmdextversion Número
Especifica uma condição verdadeira somente se o número da versão interna associado ao recurso de Extensões de Comando do Cmd.exe for igual ou superior a Número. A primeira versão é 1. Ela é incrementada de um quando melhorias significantes são adicionadas às extensões de comando. A condicionalcmdextversion nunca é verdadeira quando as extensões de comandos estão desabilitadas (por padrão, as extensões de comando estão habilitadas).
defined Variável
Especifica uma condição verdadeira, se Variável estiver definida.
Expressão
Especifica um comando e parâmetros de linha de comando a serem passados ao comando em uma cláusula else.
/?
Exibe ajuda no prompt de comando.

Comentários

  • Se a condição especificada em um comando if for verdadeira, o comando seguinte à condição será executado. Se a condição for falsa, o comando na cláusula if será ignorado e o comando executará qualquer comando na cláusula else (caso o comando tenha sido especificado na cláusula else). 
  • Quando um programa pára, ele retorna um código de saída. Para usar códigos de saída como condições, use errorlevel
  • Usando definedVariável
    Se você usar definedVariável, as três variáveis a seguir serão adicionadas: %errorlevel%%cmdcmdline% e %cmdextversion%.
    %errorlevel% é expandida em uma representação de seqüências do valor atual de errorlevel, desde que não haja uma variável de ambiente com o nome ERRORLEVEL; nesse caso, você obteria o valor dessa variável. O exemplo a seguir ilustra como você pode usar errorlevel depois de executar um programa em lotes:
    goto answer%errorlevel%
    
    :answer0
    
    echo Programa apresentou código 0
    
    :answer1
    
    echo Programa apresentou código 1
    
    goto End
    
    :end
    
    echo done! 
    
    Você também pode usar os operadores de comparação Operador_de_Comparação da seguinte forma:
    if %errorlevel% LEQ 1 goto okay
    
    %cmdcmdline% é expandido na linha de comando original passada para Cmd.exe antes de qualquer processamento do aplicativo, desde que não haja uma variável de ambiente com o nome CMDCMDLINE; nesse caso, você obteria o valor dessa variável.
    % cmdextversion % é expandido em uma representação de seqüências do valor atual de cmdextversion, desde que não haja uma variável de ambiente com o nome CMDEXTVERSION; nesse caso, você obteria o valor de dessa variável.
  • Usando a cláusula else
    A cláusula else deve ser usada na mesma do comando após if. Por exemplo:
    IF EXIST Nome_do_Arquivo. (
    
    del Nome_do_Arquivo.
    
    ) ELSE (
    
    echo Nome_do_Arquivo. ausente.
    
    )
    
    O código a seguir não funciona porque o comando del deve ser finalizado com uma nova linha:
    IF EXIST Nome_do_Arquivo. del Nome_do_Arquivo. ELSE echo Nome_do_Arquivo. ausente
    
    O código a seguir não funciona porque a cláusula else deve estar na mesma linha que o final do comando if:
    IF EXIST Nome_do_Arquivo. del Nome_do_Arquivo.
    
    ELSE echo Nome_do_Arquivo. ausente
    
    Se desejar formatar tudo em uma única linha, use a seguinte forma da instrução original:
    IF EXIST Nome_do_Arquivo. (del Nome_do_Arquivo.) ELSE echo Nome_do_Arquivo. ausente
    

Exemplos

Para exibir a mensagem "Impossível localizar arquivo de dados" caso o arquivo Produto.dat não seja encontrado, digite:
if not exist produto.dat echo Impossível localizar arquivo de dados 
O exemplo a seguir ilustra uma mensagem de erro caso ocorra um erro durante a formatação de um disco na unidade A:
:begin

@echo off

format a: /s

if not errorlevel 1 goto end

echo Ocorreu um erro durante a formatação.

:end

echo Fim do programa em lotes.
Se não houver erro, a mensagem de erro não será exibida.

Legenda da formatação

 

FormatoSignificado
Itálico
Informações que o usuário deve fornecer
Negrito
Elementos que o usuário deve digitar exatamente como é exibido
Reticências (...)
Parâmetro que pode ser repetido várias vezes em uma linha de comando
Entre colchetes ([])
Itens opcionais
Entre chaves ({}); opções separadas por barra vertical (|). Exemplo: {even|odd}
Conjunto de opções entre as quais o usuário deve escolher apenas uma
Courier font

fonte:
Saída de código ou de programa




5 comentários:

  1. Amigo, tudo bem? Preciso escrever um Batch que;

    Execute um PING em um determinado IP
    Se o IP "pingado" responder positivamente
    Exibe a Mensagem "COMUNICACAO COM SERVIDOR BEM SUCEDIDA"
    Se o IP não responder
    Exibe a Mensagem "SEM COMUNICACAO COM SERVIDOR"


    Pode me ajudar, desde ja obrigado.
    David Oliveira
    david@pcnetonline.com.br

    ResponderExcluir
    Respostas
    1. eu to indo em umonte de site atras dessa solocão tambem. faz um tempao que to procurando como fazer isso

      Excluir
    2. Obs.: tem que rodar como Administrador.


      @echo off

      :inicio
      color 0F
      cls

      set /p site=Digite o site:

      echo.
      Echo Testando...

      ::retirando o ">null" ele mostra os detalhes.
      ping -a %site% >null

      if not errorlevel 1 goto ok

      echo.
      color 0c
      echo --= SEM COMUNICACAO COM SERVIDOR =--
      pause
      goto inicio

      :ok
      color 02
      echo.
      echo --= COMUNICACAO COM SERVIDOR BEM SUCEDIDA =--
      echo.
      pause
      goto inicio

      Excluir
  2. Queria usar este comando para me ajudar com uma verificação de tarefa agendada, tenho um comando que cria uma tarefa no windows e queria verificar antes de criar se já existe uma tarefa com o mesmo nome, caso exista, o meu comando criaria uma outra tarefa com outro nome pre definido.

    ResponderExcluir
  3. Olá estou criando um script colocando uma variável dentro comando if como ==, mas eu quero colocar 2 variáveis dentro do mesmo comando if utilizando ==.

    EXEMPLO:
    :loginuser
    set loginuser=
    set loginpassword=
    cls
    set /p loginuser=Username:& set /p loginpassword=Password:
    if "%loginuser%" == "","%loginpassword%" == "" (echo Do Not Leave The Username And Password Blank & pause >nul & goto loginuser)

    ResponderExcluir