Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

Programinha em DOS...

Recommended Posts

Boas,

 

Nem sei se DOS é linguagem de programação xD

 

Tem como fazer um programinha simples, que peça pro usuário digitar alguma coisa e que depois execute alguns comandos, internamente programados, mas que use esse valor do usuário.

 

A título de exemplo, fica aquelas infames janelinhas JavaScript em que se pede o nome do visitante para escrever em tela "Olá fulano".

 

Por enquanto é só isso, mas se mais pra frente eu quiser uma GUI para o aplicativo o qual esse batch estaria operando, qual a linguagem menos trabalhosa para isso? Lembrando que não vou me especializar na linguagem seria só para, por exemplo:

 

aplicativo --option value

Poder ser visual:

 

+---------------+
| Opção:        |
|               |
| Valor #1 [ ]  |
| Valor #2 |x]  |
| Valor #3 [ ]  |
+---------------+

Pura preguiça de ficar escrevendo tudo no DOS...

Compartilhar este post


Link para o post
Compartilhar em outros sites

simplizinha assim sera q o vbscript n te ajuda?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

De repente...

 

Há uns... 15 anos atrás eu brinquei um pouquinho com VB6 mas... nada a ver né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Larga o DOS! :P

 

Porque o futuro da CLI do Windows, é outra, e ela se chama PowerShell. Estudem sobre o assunto e verão sobre o que estou falando.

Para quem tem Windows Seven, já pode verificar, digite isto no executar: powershell_ise e apertem f1 para terem um noção do que se trata. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ixi...

 

Muita coisa pro que eu queria fazer. :P

 

Nem rola aprender uma linguagem inteira só pra evitar digitar uma grande linha no DOS. Vale mais a pena salvar essa linha no Bloco de Notas e coloar no DOS via mouse.

 

Obs.: O aplicativo que se executa via DOS, na verdade é um script Perl. Ajuda em alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai parecer meio estranho, mas e se você cria-se um CMD (BAT) para isso

 

Veja esse "programinha" em CMD que fiz:

@echo off
title Programa em CMD - %DATE%

goto :menu

:menu
cls

echo Escolha um op‡ao:
echo.
echo  - Op‡ao "1":	Chamar o execultar
echo  - Op‡ao "2":	Chamar o teste
echo  - Op‡ao "c":	fechar
echo.

set /P opcao=Qual a op‡ao que voce deseja?

if /I %opcao%==1 (
set comando=Hello
goto execultar
) else if /I %opcao%==2 (
goto teste
) else if /I %opcao%==c (
goto fechar
) else (
cls
echo Op‡ao inv lida, aperte "Enter" para voltar ao menu
pause
goto :menu
)


:execultar
cls
echo %comando%
start meusoftware --%comando%
pause
goto menu


:teste
cls
echo teste
start meusoftware --teste
pause
goto menu

 

Ou tem que ter mesmo uma "GUI" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uia, esse já tá bem maneiro ^_^

 

Assim eu não preciso ficar toda santa hora navegando nos diretórios até achar o script (é, é um script Perl) pra rodar.

 

Seguinte, esse script aceita alguns argumentos. Onde (ou como já que não sei nada :yay: ) eu modificaria para permitir a passagem deles?

 

Esses argumentos são no formato -LETRA VALOR, sendo LETRA uma única letra mesmo (-s, -v, -x...)

 

Seria meio que uma pergunta intermediária antes do start, se fosse respondido alguma coisa (a lista de argumentos), ele gravaria em alguma variável (se é que Batch tem isso) e depois usaria ela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

@echo off
title Programa em CMD - %DATE%

goto :menu

:menu
cls

echo Escolha um op‡ao:
echo.
echo  - Op‡ao "1":      Chamar o "comando 1"
echo  - Op‡ao "2":      Chamar o "comando 2"
echo  - Op‡ao "3":      Chamar o "comando 3"
echo  - Op‡ao "c":      fechar
echo.

set /P opcao=Qual a op‡ao que voce deseja?

if /I %opcao%==1 (
       cls
       start seusoftware.exe --comando1
       pause
       goto :menu
) else if /I %opcao%==2 (
       cls
       start seusoftware.exe --comando2
       pause
       goto :menu
) else if /I %opcao%==3 (
       cls
       start seusoftware.exe --comando3
       pause
       goto :menu
) else if /I %opcao%==c (
       goto fechar
) else (
       cls
       echo Op‡ao inv lida, aperte "Enter" para voltar ao menu
       pause
       goto :menu
)

 

Entendendo:

cls //Limpa a tela
start seusoftware.exe --comando1 //Chama o programa com a linha de comando, sem travar
pause //pausa para não voltar ao menu, sem o usuário requisitar
goto :menu //Se apertar qualquer tecla na pausa ele volta ao menu

 

Isto é a fork para o valor definido em SET:

if /I %opcao%==1 (

 

Pode-se fazer assim, a pessoa vai te que escrever a palavra "testando", quando solicitado:

if /I %opcao%==testando (

 

Está área é apenas visual e nada afeta as variáveis.

echo  - Op‡ao "1":      Chamar o "comando 1"
echo  - Op‡ao "2":      Chamar o "comando 2"
echo  - Op‡ao "3":      Chamar o "comando 3"
echo  - Op‡ao "c":      fechar

 

Quebra de linhas, cada "echo." quebra uma linha na tela:

echo.
echo.
echo.
echo.

 

Se tiver problemas ao passar parâmetros, tente fazer assim, as vezes espaços não funcionam como esperamos:

start SOFTWARE "--PARÂMETRO"

 

Ou

start "SOFTWARE --PARÂMETRO"

 

Pode-se executar sem START também, porem a tela do CMD fica travada e só destrava ao finalizar o seu SOFTWARE(no seu caso o SHELL):

        cls
       seusoftware.exe --comando3
       pause
       goto :menu

 

Espero que ajude, um feliz ano novo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajuda, ajuda sim. Mas Batch não tem variáveis? Porque a intenção desse complemento dos parâmetros é justamente usar um valor dado pelo usuário.

 

No caso desse script Perl, ele vai trabalhar com uma URL. Ele mesmo não sabe qual é a URL, pois esta será dada pelo usuário.

 

Daí o comando ficaria:

 

perl application -f URL

Sacou?

 

E sobre a tela "congelar", seria a própria tela do DOS mesmo, certo. Se o script já roda no DOS, então tanto faz, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para setar as variaveis:

 

@echo off
title Programa em CMD - %DATE%

goto :menu

:menu
cls

echo Escolha um op‡ao:
echo.

set /P variavel_url=Qual a URL?

cls
start perl application -f %variavel_url%
pause
goto :menu

 

Sobre o congelamento, se fizer assim (removi o start):

@echo off
title Programa em CMD - %DATE%

goto :menu

:menu
cls

echo Escolha um op‡ao:
echo.

set /P variavel_url=Qual a URL?

cls
perl application -f %variavel_url%
pause
goto :menu

 

Ele trava o CMD apenas, enquanto o perl não concluir a execução ou se for um aplicativo com GUI, não fechar a "Janela" do aplicativo o CMD vai ficar travado, evitando que você deixe de concluir a tarefa do programa(no seu caso o Perl).

 

 

Espero que ajude.

 

[editado]

Não sei como funciona o Pearl, mas se ele requirir HTTP, faça assim:

perl application -f http://%variavel_url%

 

Pois evita do usuário quer que digitar o http: no CMD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, acredito que sejam as últimas perguntas.

 

Esse script (o qual não fui eu quem desenvolveu) obriga que ao menos o -f esteja presente. Se na parte do script que pergunta a URL eu ou quem for usar teclar <enter> sem informar nada, o script vai acusar erro, lógico.

 

Pra verificar se algo foi informado, depois do <enter>, bastaria:

 

if /I %variavel%=="" {

}

Daí eu posso mostrar minha mensagem personalizada. ^_^

 

Outra coisa. Como eu disse existem outros parâmetros. Se eu criar um item no menu chamado, por exemplo, Configurações, e fazer o mesmo esquema de variáveis (criando-as) funcionaria, certo? Não tem nada como escopo que as variáveis de alto nível tem, né?

 

Terceiro (essa surgiu agora). Anos atrás, quando precisei comprimir algo com taxas de compressão extremas, encontrei um tal de UHARC, que trabalhava pelo DOS. Tinha dezenas de parâmetros e eu fui testando um por um até obter a melhor compressão possível.

 

Mas se para compactar era trabalhoso, para descompactar também era. Então eu criei um arquivinho para fazer esse tipo de procedimento, mas sem variáveis, menus nem nada. Porém os textos acentuados ficavam bagunçados.

 

Dá pra resolver esse probleminha de charset?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, acredito que sejam as últimas perguntas.

 

Esse script (o qual não fui eu quem desenvolveu) obriga que ao menos o -f esteja presente. Se na parte do script que pergunta a URL eu ou quem for usar teclar <enter> sem informar nada, o script vai acusar erro, lógico.

 

Pra verificar se algo foi informado, depois do <enter>, bastaria:

 

if /I %variavel%=="" {

}

Daí eu posso mostrar minha mensagem personalizada. ^_^

Faça assim, se for execultar pelo CMD.exe, pois pelo CMD.EXE " ou aspas é um string para as ifs, então colocamos aspas em ambas comparações:

if /I '%variavel_url%'=='' (

)

Havia esquecido de falar as FORKS geralmente exige '' ou aspas unicas da maneira que fiz no CODE acima.

 

Outra coisa. Como eu disse existem outros parâmetros. Se eu criar um item no menu chamado, por exemplo, Configurações, e fazer o mesmo esquema de variáveis (criando-as) funcionaria, certo? Não tem nada como escopo que as variáveis de alto nível tem, né?

Da para criar vários menus, menus dentro de menus de maneira ilimitada, agora não entendi exatamente o que você quer com "escopo"

, se for algo como Classes ou namespace eu nunca vi =/ o máximo pelo que vi é o GOTO (acho que se chamam CICLOS ou CICLE)

 

Dá pra resolver esse probleminha de charset?

Somente alguns acentos funcionam, eis a lista, em cima para CMD e e baixo os originais, infelizmente talvez ao enviar para o forum de erro na codificação, qualquer coisa me mande seu e-mail por MP e te mando o CMD com os acentos:

@echo off

echo Para CMD:
echo   … Æ ƒ ‚ Š ¢ • ä “ £ — –  ¡  ‹ µ ·  Ô à • å â ê š š Ö Þ Ø ‡ €
echo.
echo Originais:
echo á à ã â é è ó ò õ ô ú ù û ü í ì ï Á À É È Ó ò Õ Ô Û Ü Ü Í Ì Ï ç Ç

pause

 

 

Fiz mais ou menos como ficaria o seu CMD:

@echo off

goto :menu

:menu
cls

echo Digite um endere‡o ou escolha uma op‡Æo:
echo.
echo Digite 1 para Opcao A
echo Digite 2 para Opcao A
echo.

set /P VARIAVEL=Qual a URL ou comando?

if /I %VARIAVEL%'=='' (
goto :erros
) else if /I '%VARIAVEL%'=='1' (
goto :comandoA
) else if /I '%VARIAVEL%'=='2' (
goto :comandoB
) else (
goto :comum
)

:erros
cls
echo Comando indefinido
pause
goto :menu

:comum
cls
echo perl application -f %VARIAVEL%
pause
goto :menu


:comandoA
cls
echo perl application -f comando pronto a
pause
goto :menu


:comandoB
cls
echo perl application -f comando pronto b
pause
goto :menu

 

Feliz ano novo e boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah tá. Saquei. Vou montar amanhã, então..

 

Quanto à escopo seria o "problema" que se tem com funções por exemplo, de variáveis de for da função serem uma coisa, e de dentro delas, outra.

 

Achei que cada "página" do menu tinha escopo próprio, daí o que eu definisse na "página" 1, poderia se perder ao usar na "página" 3.

 

Mas já que não tem isso, beleza.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Larga o DOS! :P

 

Porque o futuro da CLI do Windows, é outra, e ela se chama PowerShell. Estudem sobre o assunto e verão sobre o que estou falando.

Para quem tem Windows Seven, já pode verificar, digite isto no executar: powershell_ise e apertem f1 para terem um noção do que se trata. ;)

 

Brother, achei interessante esse PowerShell, porém dá uma luz. Qual a finalidade de usá-lo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.