[Tutorial] Explicando duvidas em Batch

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Tutorial] Explicando duvidas em Batch

Mensagem por Convidad em Qui 24 Maio 2012, 18:08

Me conectei ao fórum e me deparei com a seguinte Mensagem privada enviada pelo nosso Amigo "theguitarmester".

theguitarmester escreveu:Se você gosta tanto de Batch, faça uns tutoriais e poste na seção "Tutoriais Diversos".

Bom até ai tudo bem, mas ao decorrer da mensagem que me foi concedida, ele estava com duvida nos seguintes aspectos:
Então vou tentar-lhe explicar como fazer:

theguitarmester escreveu:Umas Perguntas em BAT:
como se descobre os usuarios que existem(ou o atual) EX: C:/documents and settings/"USUARIO" ou "" - como descobrir os usuarios que existem ou o usuario atual?
é que eu queria fazer algo deste Tipo:
xcopy "C:Documents and Settings%usuario atual%Arquivo.dat"

Vejamos, a primeira duvida é sobre a existência de uma arquivo, cujo o mesmo criado através de um arquivo batch onde envia as variáveis, escritas para o campo %usuario%. Se não entendeu vejamos na pratica:

- Uma pessoa qualquer, abre o arquivo Conta.bat.
- Nesse arquivo pede para que o mesmo escreva seu nome.
- Esta "pessoa", digita o seu nome e pressiona a tecla enter.
- Ao fazer isso uma pasta é criada na pasta Meus Documentos do windows, cujo nome é Database.
- E dentro dessa parte também é criado um arquivo denominado %usuario%.bat
- %usuario% é a variável do set /p no arquivo principal.
- Então se a pessoa escreveu no campo usuário "Felipe", o Batch Principal, criara uma pasta com o nome Felipe.bat
- Dentro desse arquivo, tem uma variavel escrita: set /p nomereal=Felipe, por exemplo.
- E essa variável é carrega quando a pessoa tenta carregar o Jogo, ou programa, de onde ela parou.
- O Batch pega as variáveis escritas no outro Batch recém criado.

As perguntas relacionadas a isso foram: Como se descobre os usuarios que existem(ou o atual) EX: C:/documents and settings/"USUARIO" ou "" - como descobrir os usuarios que existem ou o usuario atual?

Bom, vamos ao código:

Código:
@echo off
color 0f
goto vars

:vars
REM Vars
call :int

:int
echo 1) Entrar
echo 2) Registrar
echo 3) Sair
set /p op=
if %op%==1 goto 1
if %op%==2 goto 2
if %op%==3 goto 3
else
goto int

:2
cls
set /p novonome=Insira seu nome:"
if "%novonome%"=="%novonome%" goto camponome

:camponome
cd "%userprofile%\documents"
if exist "Database" goto skip
if not exist "Database" goto noskip

:noskip
md "Database"
goto skip

:skip
cd "%userprofile%\documents\Database"
if exist "%novonome%.bat" goto namexist
if not exist "%novonome%.bat" goto skip2

:skip2
echo set nomereal=%novonome%> "%novonome%.bat"
goto next

:next
echo.
set /p pswd=Insira uma senha:
if "%pswd%"=="%pswd%" goto camposenha

:camposenha
cd "%userprofile%\documents\Database"
echo set senha=%pswd%>> "%novonome%.bat"
goto next1

:namexist
echo.
echo Este nome ja esta sendo ultilizado por outra pessoa.
echo Pressione qualquer tecla para voltar. . .
pause >nul
goto 2

:next1
cls
echo Conta Criada.
pause
goto int

:1
cls
Set /p logname=Nome:
if "%logname%"=="%logname%" goto 2.1

:2.1
echo.
set /p logpass="Senha:"
if "%logpass%"=="%logpass%" goto login

:login
cd "%userprofile%\documents\Database"
if exist "%logname%.bat" goto call
if not exist "%logname%.bat" goto errorlog

:call
call "%logname%.bat"
if "%senha%"=="%logpass%" goto logdone
goto errorlog

:errorlog
cls
echo Senha incorreta.
pause
goto int

:logdone
echo Logado com sucesso!
pause>nul
exit

Bom esse código faz exatamente o que eu falei. Vamos a resposta das duvidas do theguitarmester.

Ele: como se descobre os usuarios que existem(ou o atual) EX: C:/documents and settings/"USUARIO" ou "" - como descobrir os usuarios que existem ou o usuario atual?

Eu: Bom vejamos, Supondo que já existe a pasta Database e que não seja preciso fazer uso do comando md para criar a mesma, teremos que verificar o que tem dentro dela. Assim:

Código:
cd "%userprofile%\documents\Database"

Com esse código iremos estar dentro da pasta Database, agora para verificar se existe o usuário dentro dessa pasta, faça assim:

Código:
if exist "%novonome%.bat" goto nomeexiste

Assim verificamos se existe a variavel %novonome%, você setar ela no quadro vars assim:

Código:
:vars
set novonome=Felipe

Ou fazer como está no codigo onde o usuario e quem define a variavel atravez da linha de comando:

Código:
set /p %novonome%=

Acrescento mais ainda, o código que eu falei aqui:

Com esse código iremos estar dentro da pasta Database, agora para verificar se existe o usuário dentro dessa pasta, faça assim:

if exist "%novonome%.bat" goto nomeexiste

Caso existir ele avança para o quadro nomeexiste, que pode ter o que você quiser. Desde um texto escrito O Nome existe, ou coisas mais avançadas com debug, etc...

Vocês: Mas como faz pra avançar pra um quadro tipo: nomenaoexiste, pra caso o nome não existir?

Simples use o:

Código:
if not exist "%VARIAVEL%" goto naoexiste

Com isso caso a variável %VARIAVEL% não existir ir para o quadro naoexiste.

Segunda duvida:


O theguitarmester estava precisando da resposta acima para fazer uma espécie de xcopy, como ele mesmo disse aqui:

Código:
xcopy "C:Documents and Settings%usuario atual%Arquivo.dat"

Bom pra quem não sabe, o xcopy é um comando no DOS que serve pra estar copiando arquivos da rede pra um computador, ou vice-versa. Ele pode ser usado da seguinte maneira, Caso esteja tentando fazer uma copia de uma pasta xx da rede F, para uma pasta no disco local C, denominada BKP.

Código:
XCOPY F:\*.* C:\BKP /D /E /F /I

Explicando:

F:\*.* Aqui vc disse para copiar tudo do drive F: para a pasta BKP do seu drive C: e informou algumas opções para o XCOPY:

/D ---> Copia somente os arquivos atualizados. Se vc informar uma data depois dessa opção ele copia somente os atualizados e/depois dessa data informada. Ex: /D:2-20-2010 (somente os atualizados em, ou depois de, 2 de Fevereiro de 2010)

/E ---> Copia pastas e subpastas, inclusive as vazias

/F ---> Exibe os nomes ORIGEM e DESTINO completos

/I ---> Se o destino não existir e estiver copiando mais de 1 arquivo, pressupõe que o destino deva ser uma pasta

Ainda tem as opções /V que verifica a cada cópia de arquivo se ela foi bem sucedida (deixa mais lento o comando, mas garante que não houve erros durante o processo da cópia)

e a opção /C que continua copiando os arquivos mesmo que ocorram erros (às vezes acontece um erro de leitura no arquivo de origem e o comando interrompe no meio, com essa opção ele continua copiando, depois vc vê o que aconteceu com o arquivo que deu erro. Isso tem um contratempo: vc tem que ficar vendo se o comando ser executado para saber se deu erro em algum arquivo ou não)

Para vc não precisar ficar vendo a execução do comando vc ainda pode incluir "> RESULTADODOBACKUP.TXT" no final do comando (sem as aspas) para guardar o resultado do comando para uma análise posterior. Nesse caso vc até pode usar o /C sem crises. Depois vc abre esse TXT para ver se não tem nenhum erro do tipo "Erro ao tentar abrir o arquivo de origem", ou coisas desse tipo.

Vale lembrar que as sintaxes podem mudar dependendo da versão de Windows que vc estiver usando, mas basicamente é isso aí.

Bom, basta inserir o código:

Código:
xcopy "C:Documents and Settings/%usuario%.bat" "C:\Dados"

No quadro que comprova a existência de uma usuário pré-escrito, ou escrito por você. Acho que agora você entendeu bounce

Qualquer duvida só postar ai pra variar.
Fuuiz Happy

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por theguitarmester em Qui 24 Maio 2012, 19:07

eu aprendi um pouco + sobre Bat, eu gosto de mecher nele ,as só sei fazer algumas coisa.

Quanto a Sua Resposta Não deu Certo!
mas me ajudou a formular a certa que ficou assim:

xcopy "C:Documents and Settings/%USERNAME%\mail.DAT"
este USERNAME é a variavel com o nome do usuario atual, era isto que eu queria saber.

quais outras variaveis desse tipo existem para descobrir os Uruários que existem?


------------------
porque em todo Tópico que você responde, você dá a Resposta Em Bath??? as respostas tem que ser em GamerMaker(ou dê nos 2)!

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por luiz_eldorado em Qui 24 Maio 2012, 19:24

quais outras variaveis desse tipo existem para descobrir os Uruários que existem?
Para saber as Variáveis do Sistema, digite CMD no menu iniciar e aperte enter, e na janela que abre, digite SET. Aparecerá todas as variáveis

Até mais!

EDIT: É verdade ele só posta coisas sobre BatchScript. Nunca vi nenhuma mensagem sobre GameMaker. Eu tô achando que seu lugar não é aqui... Mas tudo bem, não podemos fazer nada (o que será que eu ia fazer, eh?)


Última edição por luiz_eldorado em Qui 24 Maio 2012, 19:57, editado 1 vez(es)

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por theguitarmester em Qui 24 Maio 2012, 19:43

luiz_eldorado obrigado, funcionou.
alguma das variaveis que aparece:
USERNAME
APPDATA
TEMP
TMP
USERPROFILE

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por PedroX em Qui 24 Maio 2012, 20:30

Movido: Fórum Geral -> Assuntos sobre Programação.

Leia a descrição dos fóruns ("seções") em que posta.

Obs: bom tutorial

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por Convidad em Qui 24 Maio 2012, 21:51

Pedro escreveu:Movido: Fórum Geral -> Assuntos sobre Programação.

Valeu Pedro por mover.

theguitarmester escreveu:Quanto a Sua Resposta Não deu Certo!

Estranho aqui funcionou perfeitamente.

theguitarmester escreveu:mas me ajudou a formular a certa que ficou assim:

Ainda bem...

luiz_eldorado escreveu: É verdade ele só posta coisas sobre BatchScript. Nunca vi nenhuma mensagem sobre GameMaker. Eu tô achando que seu lugar não é aqui... Mas tudo bem, não podemos fazer nada (o que será que eu ia fazer, eh?)

Avah, Posto mesmo por que pessoas como você ficam falando que a linguagem Batch é inútil. (:
Fuuiz Happy

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por luiz_eldorado em Qui 24 Maio 2012, 22:03

Avah, Posto mesmo por que pessoas como você ficam falando que a linguagem Batch é inútil. (:
Não acho BatchScript inutil. Por exemplo, o Ninja8086 faz um monte de códigos em Batch (ele colocou a extensão .com, tanto faz se é .bat ou não) pra fazer um negócio de associação.
Mas é que aqui o negócio é GameMaker, você pode até fazer um Tuto desse (está na categoria Assuntos sobre Programação, ok) mas não ficar respondendo tópicos, pois as pessoas querem GM nas respostas.
Ah e não disse que gostei do tutorial =D

Até mais!

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por moisesBR em Qui 24 Maio 2012, 22:30

Só pra constar:
Verdade. Mesmo querendo dissecar o gm, nao vamos conseguir se livrar disso!
Nao vamos fujir do assunto aqui que é o gm, mas, a programaçao de games jogáveis online nao recorrem a comandos de bath? Dlls, compactaçoes?

Volta e meia eu topo com esses comandos e o melhor meio de controla-lo saber pra que serve é conhecendo-o. These commands can be dangerous in the hands malicious

moisesBR

Número de Mensagens : 873
Idade : 40
Data de inscrição : 24/10/2009
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://inprovise.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por theguitarmester em Qui 24 Maio 2012, 23:56

em algumas das suas respotas foram útil para ampliar meu conhecimento sobre Bat(ou Batch tanto faz!)
uma das coisas que eu + gosto no Bat, é que você pode Usa-lo em praticamente em Qualquer Lugar! você pode os crialos no seu computador nos dos outros no do colégio(criar programas que ao iniciar o computador execute e apareça uma janela do computador com conteudos indesejados)

mas tente em Suas Respotas, responda-las usando o GML, e depois use também o Batch. é sempre bom ter + de uma Solução.

uma dica é que você faça + tutoriais sobre Batch, já que você parece ter um bom Conhecimento Nesta área.
um TUTORIAL que você poderia FAZER, era um sobre como Fizar o Bat no menu Iniciar de modo Oculto, e outro de como fazer para um BAT ser executado de modo oculto(iria ajudar para fazer jogos no GM usando u, BAT, porque ficar com aquela tela preta aparecendo enquanto está jogando, não seria Legal)

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por GameMakerTutoriais em Qui 24 Maio 2012, 23:57


Ele: como se descobre os usuarios que existem(ou o atual) EX: C:/documents and settings/"USUARIO" ou "" - como descobrir os usuarios que existem ou o usuario atual?

Um jeito rápido é usar o wmic. Wmic quer dizer "Windows Management Instrumentation Command-line". É uma das boas ferramentas do Windows pós 9x, serve pra gerenciar o sistema via linha de comando:

Código:
for /f "skip=1 tokens=1-3 delims=\ " %a in ('wmic useraccount get') do echo %c


Com esse código iremos estar dentro da pasta Database, agora para verificar se existe o usuário dentro dessa pasta, faça assim:

Código:
if exist "%novonome%.bat" goto nomeexiste

O problema é que nem todo Windows permite isso. No Windows XP SP1 ou 2000 isso não é possível. O "if exist" não pode ser usado pra testar uma pasta diretamente, apenas arquivos.

A própria documentação da Microsoft garante isso. Você pode fazer isso de uma forma mais garantida testando a existência do dispositivo "nulo" (nul) na pasta, porque teoricamente, ele "existe" em qualquer uma:

Código:
for /f "delims=*" %%a in ("C:\Documents and Settings\Administrador\Meus Documentos") do (
        if exist %%~sa\nul goto tempasta
)

Há uma explicação lógica pra isso, mas não vou postar o link por causa da regra de anti-spam do fórum: http://gmbr.forumeiros.com/f1-regras?tid=e44df9fd1ded6ece01990c6e8a40f17b


Código:
if not exist "%VARIAVEL%" goto naoexiste
Com isso caso a variável %VARIAVEL% não existir ir para o quadro naoexiste

Se associada a um nome de arquivo, sim. Mas nem todo caractere é permitido em nomes de arquivos, o que significa que a variável poderá existir e o arquivo não. Pra testar variáveis, você também pode usar "if defined". Ele testa tanto variáveis de ambiente locais (da instância cmd) quanto do sistema:

Código:
if defined VARIAVEL goto naoexiste


e a opção /C que continua copiando os arquivos mesmo que ocorram erros (às vezes acontece um erro de leitura no arquivo de origem e o comando interrompe no meio, com essa opção ele continua copiando, depois vc vê o que aconteceu com o arquivo que deu erro. Isso tem um contratempo: vc tem que ficar vendo se o comando ser executado para saber se deu erro em algum arquivo ou não)

É uma das melhores partes de saber usar o prompt de comando! Já fiz muita cópia de arquivos por rede assim.

Mas não precisa ficar vigiando, você pode filtrar somente os erros pra um log usando um pipe no STDOUT da janela, ou conferindo o código de saída do programa (ErrorLevel). Se ele for maior que zero, houve erro em pelo menos um arquivo. O pipe é simples também:

Código de saída:
Código:
if %ERRORLEVEL% neq 0 goto houveerr
...a propósito, labels podem ter mais de 8 caracteres, mas só os 8 primeiros são reconhecidos (houveerr)

Pipe:
Código:
comando | find /i "erro"

Avah, Posto mesmo por que pessoas como você ficam falando que a linguagem Batch é inútil. (:

Eu sei só tava tentando ampliar o conhecimento dos demais usuários sobre esta tão antiga linguagem denominada Batch. Não to aqui pra criar inimizades, mas sim tentar fazer vocês conhecerem mais o Batch. E pode ocorrer uma integração entre batch e GML, nada é inutil, so to tentando mostrar isso e abrir suas mentes para que possam fazer um bom uso e ate quem saiba fazer um Jogaço com GML + Batch.

Então Paulo (vi seu nome no outro tópico), buscar recursos do sistema não é "inútil", concordo com você, é uma atitude inteligente. Você aproveita um recurso nativo, seguro e rápido. Também não acho batch script "antiquado". É antigo sim, mas antiquado não.

O fato é que isso, infelizmente, atrapalha muito quem faz o tópico com a dúvida em GML. Às vezes, a pessoa não tem tempo de entrar no fórum o tempo todo pra conferir se há postagens novas no tópico que ela criou. Por fim, ela verifica a caixa de entrada do email (notificações de resposta) para ver se o tópico já tem solução.

No entanto, ela chega aqui e se depara com um assunto totalmente fora do contexto da dúvida (batch script). Além disso, outras pessoas verão que o tópico já tem resposta e não tentarão responder mais, pensando que já está solucionado ou que quem respondeu primeiro irá continuar ajudando.

A sua intenção é ajudar, mas pense nisso. Isso vai atrapalhar quem cria o tópico...

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por GameMakerTutoriais em Sex 25 Maio 2012, 11:10


Focuws escreveu:èe... Então ta, vou começar postar coisa sobre Delphi, poskapsoakspaks.
Depois sobre C, e depois Assembly, Pascal.

Contanto que ajude ou dê uma direção correta pra quem está com a dúvida, acho que não há problemas. A ajuda será bem-vinda, falo isso por mim pelo menos.

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por moisesBR em Sex 25 Maio 2012, 13:35

Beleza! Creio entao que assim encerre essa discursao, mesmo nao agradando gregos ou trianos, alguem vai ser beneficiado.

Focuws:
Nao acho que deva postar aqui outras linguagens, até porque iria desviar o foco aqui é quase exclusivamente da linguagem do gm, a nao ser, extremamente necessário, ou um recurso a mais, que ainda nao conseguimos acessar pelo gm!
Se é do seu interesse escrever algo em outras linguagens, aconselho a criar um forun! E por favor me convide também especiamente se for sobre: Delphi, visual basic e assembly, além de Sketchup(q ja conheço até bem), wings3d e blender(irc difícil pra ...) e algum fácil de criar movimentos em 3D.

Já a tal telinha preta típica de DOS... desde que o motivo seja alcançado, o Blender e o psxfin usa, fica feia mas tem lá suas funcionalidades. É so minimizar ué! Ei Focuws, deve ter um meio de fazer isso ou ocultar a tal janelinha, nao?

Pessoalmente nao terei vergonha de adimitir minha noobisse e vou perguntar mesmo quando nao se trate diretamente de gm, princialmente se o assunto for bath que pelo visto é sua especialidade(?), Focuws?

moisesBR

Número de Mensagens : 873
Idade : 40
Data de inscrição : 24/10/2009
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://inprovise.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Explicando duvidas em Batch

Mensagem por Conteúdo patrocinado Hoje à(s) 14:40


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum