none
Comparando extensões com .BAT (BATCH) INICIANTE RRS feed

  • Pergunta

  • Estou tentando comparar um arquivo com uma extensão específica. Segue teste:
    SE %varíavel% for igual a "%variável%.exe" == VERDADEIRO
    SE %varíavel% for diferente de "%variável%.exe" == FALSO

     

    Muito simples, eu quero comparar a extensão de um arquivo, se a extensão for .EXE o teste será verdadeiro caso contrário o teste será FALSO.

    @set /p exe= Arquivo exe: 
    if %exe% NEQ "%exe%.exe" (Echo Arquivo invalido!) else (Echo Arquivo EXE!)
    pause

     

    Quero saber o que estou fazendo de errado nessa minha linha de comando.

    terça-feira, 26 de setembro de 2017 14:29

Respostas

  • Yuri,

    Este abaixo deve servir pra você:

    @echo off
    SetLocal EnableDelayedExpansion
    
    set extensao=.exe
    set /p arquivo=Digite:
    
    if !arquivo:~-4! == !extensao! (
    	echo Arquivo EXE
    ) else (
    	echo Arquivo Invalido
    )
    pause
    


    Att, Paulo Rocha MCSA 2012R2 | MCSE 2012 R2 Server Infrastructure | MCSE 2016 Cloud Platform

    • Marcado como Resposta Yuri Pinheiro quarta-feira, 27 de setembro de 2017 14:45
    quarta-feira, 27 de setembro de 2017 10:47

Todas as Respostas

  • Veja o exemplo abaixo, supondo que você tenha os arquivos com as extensões salvas em um documento .TXT:

    setlocal enableDelayedExpansion
    
    set Extensao=.exe.
    for /f "delims=#" %%A in (teste.txt) do (
      if "!Extensao:%%~xA.=!" neq "!Extensao!" (
        echo %%~xA Arquivo EXE!
      ) else (
        echo %%~xA Arquivo Invalido!
      )
    )

    Exemplo do conteúdo do arquivo teste.txt:
    Arquivo.exe
    File.bmp
    File2.exe
    File3.dwg
    Arquivo.txt

    Este scrip lê cada linha do arquivo teste.txt e informa qual extensão é .EXE.


    Att, Paulo Rocha MCSA 2012R2 | MCSE 2012 R2 Server Infrastructure | MCSE 2016 Cloud Platform

    terça-feira, 26 de setembro de 2017 15:42
  • Veja o exemplo abaixo, supondo que você tenha os arquivos com as extensões salvas em um documento .TXT:

    setlocal enableDelayedExpansion
    
    set Extensao=.exe.
    for /f "delims=#" %%A in (teste.txt) do (
      if "!Extensao:%%~xA.=!" neq "!Extensao!" (
        echo %%~xA Arquivo EXE!
      ) else (
        echo %%~xA Arquivo Invalido!
      )
    )

    Exemplo do conteúdo do arquivo teste.txt:
    Arquivo.exe
    File.bmp
    File2.exe
    File3.dwg
    Arquivo.txt

    Este scrip lê cada linha do arquivo teste.txt e informa qual extensão é .EXE.


    Att, Paulo Rocha MCSA 2012R2 | MCSE 2012 R2 Server Infrastructure | MCSE 2016 Cloud Platform

    Muito bom script construído aqui por você Paulo Rocha! Aprendi com ele. No entanto, não é bem exatamente o que eu quero. Meu objetivo é criar um bat, que ele peça o caminho de um arquivo, e após inserido o caminho do arquivo ele identifique se o arquivo é EXE ou não. Pelo o que eu entendi do seu script postado aqui, ele lê o conteúdo de um arquivo TXT, e não é isso que eu quero, eu quero que o bat leia qualquer arquivo apontado. Vou citar um exemplo do que eu exatamente quero. O bat seria assim:

                           INICIO BAT

    1 Insira o caminho do arquivo .EXE: C:\teste.txt
    2 Arquivo Inválido!
    3 Insira o caminho do arquivo .EXE: C:\teste.exe
    4 Arquivo EXE!

                            FIM DO BAT

    Na linha 1, o bat pediria para inserir o caminho do arquivo EXE, caso informasse um arquivo não EXE, o bat retornaria com a informação de que o arquivo inserido não seria EXE (Arquivo inválido) como mostra na linha 2; Após isso, o bat pediria novamente para inserir o arquivo EXE, na linha 3 informamos um arquivo com extensão EXE, sendo assim o bat retornando a mensagem identificando que o mesmo seria um arquivo EXE, como mostra na linha 4.


    terça-feira, 26 de setembro de 2017 19:37
  • Yuri,

    Este abaixo deve servir pra você:

    @echo off
    SetLocal EnableDelayedExpansion
    
    set extensao=.exe
    set /p arquivo=Digite:
    
    if !arquivo:~-4! == !extensao! (
    	echo Arquivo EXE
    ) else (
    	echo Arquivo Invalido
    )
    pause
    


    Att, Paulo Rocha MCSA 2012R2 | MCSE 2012 R2 Server Infrastructure | MCSE 2016 Cloud Platform

    • Marcado como Resposta Yuri Pinheiro quarta-feira, 27 de setembro de 2017 14:45
    quarta-feira, 27 de setembro de 2017 10:47
  • Yuri,

    Este abaixo deve servir pra você:

    @echo off
    SetLocal EnableDelayedExpansion
    
    set extensao=.exe
    set /p arquivo=Digite:
    
    if !arquivo:~-4! == !extensao! (
    	echo Arquivo EXE
    ) else (
    	echo Arquivo Invalido
    )
    pause
    


    Att, Paulo Rocha MCSA 2012R2 | MCSE 2012 R2 Server Infrastructure | MCSE 2016 Cloud Platform


    Era bem isso que eu queria Paulo Rocha! Muito obrigado.

    Você poderia me explicar essa linha de comando?  if !arquivo:~-4! == !extensão!

    quarta-feira, 27 de setembro de 2017 14:51
  • Yuri,

    Neste caso o valor da variável 'extensao' é .exe.

    Na sintaxe do Batch, você usa o ~ para contar os caracteres da variável, e o - para contar de traz para frente.
    Eu coloquei -4 pois são os 4 últimos dígitos da variável arquivo, sendo então o ".exe".

    Por exemplo:
    Supondo que você digite file.exe, e mandar escrever echo !arquivo:~2!, o resultado será quivo.ex
    Se der o comando echo !arquivo:~-4!, o resultado será ".exe".

    Espero que tenha entendido.

    PS: Eu comecei a criar scripts com Batch, muito prático para soluções rápidas, porém é bem baixo nível e acaba se tornando confuso e complicado quando você quer fazer algo mais complexo. Recomendo que você estude PowerShell. Muito mais prático e faz tudo que você possa imaginar.


    Att, Paulo Rocha MCSA 2012R2 | MCSE 2012 R2 Server Infrastructure | MCSE 2016 Cloud Platform

    quarta-feira, 27 de setembro de 2017 20:23
  • Muito obrigado, entendi perfeitamente, vou procurar aprender mais sobre PowerShell!
    quarta-feira, 27 de setembro de 2017 20:38