quarta-feira, 3 de fevereiro de 2010

Batch Script - Comando SET

Variáveis de Ambiente



O comando set é um comando extremamente poderoso. Sua função é exibir, definir e alterar variáveis de ambiente.
Sempre nos deparamos com documentações técnicas onde é muito usado as variáveis de ambiente.
Por exemplo: %SYSTEMROOT%, ou %SYSTEMDRIVE%
Para consultar as variáveis de ambiente no prompt de comando simplesmente digite: SET


Essas variáveis de ambiente são do sistema, porém podemos definir nossas próprias variáveis.
A definição de variáveis é bem simples:
As variáveis possuem um nome, exemplo computername, mas devemos usar  %  para fazer o uso das variáveis em scripts, como no exemplos %computername%.

SET [[variável]=[cadeia de caracteres]]

-> script5.bat
---------------------------------------
@ECHO OFF
CLS
SET SRT=SecurityResponse
MD C:%SRT%
COPY C:*.LOG /s C:%SRT%
---------------------------------------Neste exemplo será definida a variável SRT, facilitando a criação de um diretorio e copia de arquivos.

Operações matemáticas
SET /A expressão


( )
Agrupamento
! ~ -
Operadores Unários
* / %
Operadores Aritméticos
+ -
Operadores Aritméticos
<< >>
Alternância Lógica
&
bit a bit E
^
bit a bit exclusivo OU
|
bit a bit OU
=   *=   /=   %=   +=   -=   &=   ^=   |=    <<=   >>=
Atribuição

Separador de expressões

-> script6.bat
---------------------------------------
@ECHO OFF
SET /A SOMA=2+5
ECHO SOMA DE 2+5=%SOMA%
SET /A DIVISAO=9/2
SET /A MOD=9%%2
ECHO DIVISAO DE 9/2=%DIVISAO% COM RESTO=%MOD%
SET /A MULT=7*7
ECHO MULTIPLICACAO DE 7X7=%MULT%
---------------------------------------
Neste exemplo o script gera vários valores de operações matemáticas básicas.
Interação com o usuário

SET /P variável=[cadeia_do_prompt]

-> script7.bat
---------------------------------------
@ECHO OFF
CLS
SET /P NOME=QUAL O SEU NOME ?
ECHO OI %NOME%, VOCE ESTA USANDO O COMPUTADOR %COMPUTERNAME%
---------------------------------------
Neste exemplo o  script lê o nome do usuário e imprime na tela o uma mensagem personalizada com seu nome e o computador que esta usando.


Expansão de variáveis.
Uma mesma variável pode ser utilizada diversas vezes em um script e também pode ser definida com valores diferentes durante a execução do script.


Por padrão a expansão de variável  atrasada é desabilitado.
Isso será visto adiante no comando “SETLOCAL”.

Batch Script - Exemplo


echo MOVE/-Y  *.jpg %dir% >>TESTE.BAT
echo MOVE/-Y  *.jpeg %dir% >>TESTE.BAT

:INI
@ECHO Off
cls
color 9e
echo.     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.     @             COPIAR ARQUIVOS AGORA ?                @
echo.     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.
echo.
color 9C
echo.                 @@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.                @           OPCOES           @
echo.                 @@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.
echo.
color 9A
echo.     @@@@@      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.     @ C @      @    COPIAR ARQUIVOS AGORA ? @
echo.     @@@@@      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.
echo.
echo.
color 9E
echo.     @@@@@      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.     @ S @      @           SAIR ?           @
echo.     @@@@@      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.

echo.---------------------------------------------------------
echo.
:aff
set /p opcao=****Digite a opcao--

if %opcao% equ S goto ex2
if %opcao% equ s goto ex2
if %opcao% equ C goto vb3
if %opcao% equ c goto vb3
:ex2
echo Saindo.................................

pause
exit

:vb3
echo gerando cópias.........................
@ECHO Off
echo @ECHO OFF >>TESTE.BAT
set hora=%time:~0,2%Hs%time:~3,2%Min
set data=%date:~4,2%-%date:~7,2%-%date:~-4%
:: o endereço abaixo é o caminho onde os arquivos irao ser salvos
:: \\BORSATTI\ARQ\Videos\%data% mude para o caminho que deseja
:: más não esqueça de manter \%data%
set DIR=\\BORSATTI\ARQ\Videos\%data%
echo color F4>>TESTE.BAT
echo cls>>TESTE.BAT
echo if not exist %dir% goto %data% >>TESTE.BAT
echo if exist %dir% goto %data%PROXIMA >>TESTE.BAT
echo :%data% >>TESTE.BAT
echo md %dir% >>TESTE.BAT
echo :forca>>TESTE.BAT
echo @ECHO OFF >>TESTE.BAT
echo MOVE/-Y  *.mpeg %dir% >>TESTE.BAT
echo MOVE/-Y  *.mov %dir% >>TESTE.BAT
echo MOVE/-Y  *.wmv %dir% >>TESTE.BAT
echo MOVE/-Y  *.avi %dir% >>TESTE.BAT
echo MOVE/-Y  *.mpg %dir% >>TESTE.BAT
echo MOVE/-Y  *.jpg %dir% >>TESTE.BAT
echo MOVE/-Y  *.jpeg %dir% >>TESTE.BAT
echo MOVE/-Y  *.mpa %dir% >>TESTE.BAT
echo MOVE/-Y  *.asf %dir% >>TESTE.BAT
ECHO goto %data%EXIT >>TESTE.BAT
echo :%data%EXIT >>TESTE.BAT
echo goto exit >>TESTE.BAT
echo @ECHO Off >>TESTE.BAT
echo :%data%PROXIMA >>TESTE.BAT
echo @ECHO JA EXISTE UMA PASTA COM ESTA DATA %data% >>TESTE.BAT
echo md %dir%\%hora% >>TESTE.BAT
echo @ECHO OFF >>TESTE.BAT
echo @ECHO OFF >>TESTE.BAT
echo MOVE/-Y  *.mpeg %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.mov %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.wmv %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.avi %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.mpg %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.jpg %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.jpeg %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.mpa %dir%\%hora% >>TESTE.BAT
echo MOVE/-Y  *.asf %dir%\%hora% >>TESTE.BAT
ECHO goto %data%EXIT >>TESTE.BAT
echo :exit >>TESTE.BAT
echo PAUSE >>TESTE.BAT
CALL TESTE.BAT

rem @ECHO Off
cls
color 9f
echo.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.@             CRIADAS AS PASTAS COM SATISFACAO       @
echo.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo.
echo.
echo.   OPCOES
echo.
echo.
echo.   (V)    VER ARQUIVOS COPIADOS
echo.   (S)    SAIR SEM APAGAR
echo.---------------------------------------------------------
echo.
:aff
set /p opcao=****Digite a opcao--

if %opcao% equ S goto ex
if %opcao% equ s goto ex
if %opcao% equ V goto vb2
if %opcao% equ v goto vb2
:ex
del teste.bat
echo Saindo.................................
exit

:vb2
del teste.bat
explorer %dir%
goto ex

Batch Script - Redirecionadores



O Sinal > representa um redirecionador. Podemos redirecionar a saída da tela, para qualquer porta existente no micro.
Temos as seguintes portas:

Paralelas LPT1,LPT2,LPT3
Seriais COM1, COM2, COM3
PRN - representa a porta da impressora no DOS
NUL - representa uma porta nula.
ARQUIVO - substitua por qualquer arquivo

Muito importante:
Quando redirecionamos qualquer comando ou arquivo para outro arquivo usando >
ele cria um novo arquivo.
Para que o redirecionamento seja
adicionado em um arquivo já existente, temos que usar >>.

Veja no exemplo:

-> script3.bat
---------------------------------------
@ECHO OFF
CLS
ECHO  Imprimindo a lista de arquivos do diretório atual...
DIR > lista.txt
ECHO Fim do diretorio >> lista.txt
TYPE lista.txt > prn
---------------------------------------


Neste exemplo o comando dir é redirecionado para um arquivo de texto chamado lista.txt e em seguida o comando echo adiciona a frase FIM DO DIRETORIO ao arquivo lista.txt e por final comando type redireciona o conteúdo de lista.txt para a impressora.

-> script4.bat
---------------------------------------
REM Autor: Daniel Donda
@ECHO OFF
CLS
ECHO Este é meu arquivo de lote e quando
ECHO quiser continuar pressione qualquer tecla !
PAUSE > NUL
---------------------------------------Neste exemplo o comando pause está sendo direcionado para nulo, os seja sua mensagem padrão não será exibida.

Batch Script – Comando REM


O comando REM permite inserir comentários, em arquivos de lote, e caso você não queira executar alguma linha basta inserir o comando REM antes do comando.

Sintaxe:
REM [comentário]
-> script2.bat
---------------------------------------
REM Desenvolvido por Daniel Donda
@ECHO off
CLS
ECHO Hello World
REM PAUSE
---------------------------------------
Observação: neste script o comando pause não será executado, pois esta como comentário

Batch Script - Comando ECHO e PAUSE

Criando scripts BATCH – Comando ECHO e PAUSE






Echo on e Echo off
O Comando ECHO desabilita a repetição do comando na tela. Para não ver o comando como se ele tivesse sido digitado devemos iniciar os arquivos de lote com a linha @echo off. O arroba (@) antes de ECHO OFF omite a aparição do próprio comando echo.
O comando ECHO seguido por um texto, na execução do arquivo esse texto aparecerá como uma mensagem.
Sintaxe:
ECHO [ON | OFF]
ECHO [mensagem]

O Comando PAUSE apenas pausa o script, porém é muito útil quando precisamos que uma mensagem ou execução bem sucedida seja vista.
Sintaxe:
PAUSE

-> script1.bat
---------------------------------------
@ECHO off
CLS
ECHO Hello World
PAUSE
---------------------------------------
Dica: Para pular uma linha basta usar o comando ECHO e um caractere ASCII especial, para conseguir esse caractere basta manter a tecla ALT pressionada, digitar 16, soltar a tecla ALT , pressione novamente ALT e digite 8.

Batch Script - Início

Batch Script
Olá, irei explicar aqui algumas coisinhas sobre batch script, exemplos, não apenas para Win98, mas também para NT/XP pois existem poucos documentos para XP em português...
O que é um BAT?
Tipo de arquivo em lote (batch file) do DOS e sistemas Windows. Neste tipo de arquivo pode-se entrar vários comandos de linha de comando a serem executados, em vez de ter de escrevê-los um a um na linha de comando. O arquivo em lote com extensão BAT mais famoso é o Autoexec.bat, que é executado toda a vez em que o sistema operacional é carregado.

Bom, vamos conhecer agora alguns comandos que iremos usar frequentemente, se tiver dúvida, digite COMANDO /? que irá ser mostrado uma explicação e exemplos do seu uso:
ECHO
Serve para que seja ativado ou desativado o "eco" do comando ou para que seja mostrado uma mensagem. Usa-se
echo. para quebrar uma linha.
Exemplo1:
@echo off
echo Olá mundo!
echo.
echo :D

O @ antes do echo off serve para que o mesmo não seja mostrado, e assim ele desative o "eco" silenciosamente. Se tiver alguma dúvida, crie um exemplo sem usar o @.
Exemplo 2:
@echo off
echo Inicio do arquivo > Teste.txt
echo. >> Teste.txt
echo Bla bla bla >> Teste.txt

Isso fará com que seja escrito os dados no arquivo Teste.txt, ficando assim:
Inicio do arquivo

Bla bla bla

CLS
Serve para limpar a tela.. é como se fosse um /clear para quem usa IRC.. ^^
GOTO
Serve para alterar a ordem normal de execução do batch, fazendo ir para um rótulo específico, um rótulo é identificado com o :.
Exemplo:
@echo off
GOTO UIA
echo Deveria aparecer isso se não fosse o rótulo :D
:UIA
echo Pulamos para cá! hehehe

Parâmetros
Isso é muito interessante.. é para que se possa usar parâmetros de execução em seu batch. Em programas por exemplo que precisa ser digitado:
nomedoprograma /i (para instalar)
nomedoprograma /d (para desintalar)
ou pode ser
-i ao invés de /i e -d ao invés de /d.
No batch script, pode-se identificar o parâmetro, através disso:
%1 - Primeiro parâmetro
%2 - Segundo parâmetro e assim sucessivamente.
Exemplo:
@echo off
echo %1 - Parametro 1
echo %2 - Parametro 2

Execute-o assim:
nomedoarquivo vamos ver
Aparecerá:
vamos - Parametro 1
ver - Parametro 2. Simples né?
SET
Serve para exibir, definir ou remover variáveis.
Variável é algo que guarda alguma informação, se chama variável por que seu valor pode variar. (duh)
Para setar uma variável: SET variavel=seu_valor
Para visualizar ou usar o valor da variável digite: %variavel%.

Exemplo:
@echo off
set nome=""
Digite o seu nome:
set /p nome=
echo.
echo Ola %nome% !!

IF / ELSE
É usado em praticamente todas linguagens de programação, serve para impor uma condição.

Exemplo:
@echo off
set opcao=""
echo Digite uma opcao (1 ou 2):
set /p opcao=
IF [%opcao%] EQU [1] (GOTO OPCAO1) ELSE (GOTO OPCAO2)
:OPCAO1
echo Opcao 1 bla bla bla
goto FIM
:OPCAO2
echo Opcao 2 bla bla bla
:FIM
echo CABOU

Se tiver dúvidas sobre o IF, digite no prompt IF /?
CHOICE (Em Win9x)
Possibilita dar opções de escolha para a pessoa.

Exemplo:
@echo off
choice /n/c123
if errorlevel 1 goto A1
if errorlevel 2 goto A2
if errorlevel 3 goto A3
:A1
echo Acao 1
goto FIM
:A2
echo Acao 2
goto FIM
:A3
echo Acao 3
goto FIM
:FIM
echo Kabou..

Bom, visto algumas funções, dê uma re-lida, use o parâmetro /? para conhecer mais sobre cada comando, crie coisinhas bobas para ver se já entendeu..
Bom, iremos criar duas tools(ferramentas), a primeira é para o comando PING e outra será para quem usa rede, pra facilitar o uso do NET SEND.
Talvez possa ter incompatibilidade com Win9x já que irei fazer no XP..

Muitos acham que o PING é apenas ping IP/HOST, mas desconhecem suas outras opções, então vamos lá, dê um PING /?:
Uso: ping [-t] [-a] [-n num] [-l tamanho] [-f] [-i TTL] [-v TOS]
[-r num] [-s num] [[-j lista_hosts] | [-k lista_hosts]]
[-w tempo_limite] nome_destino Opções:
-t Dispara contra o host especificado até ser interrompido.
Para ver estatísticas e continuar, pressione CTRL-Break;
para terminar, pressione CRTL-C.
-a Resolve endereços para nomes de host.
-n num Número de requisições de eco a enviar. O valor padrão é 4.
-l tamanho Envia o tamanho do buffer.
-f Ativa o sinalizador de não-fragmentação no pacote.
-i TTL Define o tempo de vida.
-v TOS Define o tipo de serviço.
-r num Rota dos pacotes para saltos.
-s num Data e hora para saltos.
-j lista_hosts Rota ampliada de origens definida em .
-k lista_hosts Rota restrita de origens definida em .
-w tempo_limite Tempo limite em milissegundos a aguardar para cada resposta.

Ótimo, vamos criar uma ferramenta para que ao usuário digitar o nome do batch file, ele pergunte o IP, número de requisições. tamanho do pacote e tempo limite.
Mãos a obra:

Dê um:
edit xping.bat
Abrirar o editor.. se não gostar, faça no bloco de notas mesmo :P

Obs: REM é usado para comentar uma linha...
@echo off
REM Limpa as variaveis...
set ip=""
set num=""
set pack=""
set timeout=""
echo.
echo Qual o IP desejado?
REM Ira pegar o valor que for digitado e atribuir a variavel ip
set /p ip=
echo.
echo Qual o tamanho do pacote a ser enviado? (max: 65500)
REM Ira pegar o valor que for digitado e atribuir a variavel pack
set /p pack=
echo.
echo Qual sera o número de requisicoes? Coloque 0 para ser infinito.
REM Ira pegar o valor que for digitado e atribuir a variavel num
set /p num=
echo.
echo Qual sera o tempo limite de espera? Em milisegundos.
REM Ira pegar o valor que for digitado e atribuir a variavel timeout
set /p timeout=
echo.
cls
echo **********************************************
echo *                                            *
echo *        XPing por whit3_sh4rk               *
echo *                                            *
echo **********************************************
echo.
REM Mostra qual foi o alvo definido anteriormente, usando a variavel ip
echo Iniciando o ping ao alvo: %ip%
echo.
REM Lembra do numero de requisicoes? (Coloque 0 para ser infinito.)
REM Iremos pegar o valor atribuido ao numero de requisicoes
REM se for igual a 0 ele fara o ping infinito, usando o parametro -t
REM se não for igual a 0 ele pega o numero de requisicoes atribuido
REM a variavel %num% e usa-o...
IF [%num%] EQU [0] (
ping -t %ip% -l %pack% -w %timeout%
) ELSE (
ping %ip% -n %num% -l %pack% -w %timeout%
echo.
echo Fim do ping!
)

Ótimo, terminanos! Salve isso é claro!
Agora teste o programa, e tente entender cada linha(nossaaa q difícil!!) kkkk depois disso vamos agora para a próxima tool, nela usaremos parâmetros..
Obs: Só uma dica, se quiserem usarem parâmetros também nesse "xping" é só definir corretamente o parametro 1=ip, parametro 2=pack, parametro 3=num, parametro 4=timeout, ae é só a pessoa usar:
xping 127.0.0.1 65500 5 1000
Ou seja, irá pingar no
127.0.0.1, com um buffer de 65500 bytes, fazer isso 5 vezes, e esperar 1seg pelo resposta... :D
Mãos a obra 2 a revolta(lol):
Bom, imaginemos que aqui na rede tem 3 máquinas, seus nomes:
LOCKE
SAWYER
HURLEY
(qualquer semelhança com o seriado LOST é mera coincidência :)

Dê um:
edit msg.bat

Vamos lá:
@echo off
set msg=""
IF [%1] EQU [] GOTO AFF
IF [%1] EQU [LOCKE] (GOTO LOCKE) ELSE IF [%1] EQU [SAWYER] (GOTO SAWYER) ELSE IF [%1] EQU [HURLEY] (GOTO HURLEY) ELSE (GOTO AFF)
:LOCKE
echo Digite a mensagem que deseja enviar para LOCKE:
set /p msg=
echo.
net send LOCKE %msg%
GOTO :EOF
:SAWYER
echo Digite a mensagem que deseja enviar para SAWYER:
set /p msg=
echo.
net send SAWYER %msg%
GOTO :EOF
:HURLEY
echo Digite a mensagem que deseja enviar para HURLEY:
set /p msg=
echo.
net send HURLEY %msg%
:AFF
echo.
echo Nenhum parametro valido foi especificado!

Salve..
Como será usado?
Abra o prompt e digite:
msg LOCKE
ou
msg SAWYER
ou
msg HURLEY

Lembre-se de que é CaSe SeNsItiVe :D

Saldos Mensais

Para a correta geração dos Saldos Mensais é necessário alterar um parâmetro, na transação sm30 chamar a tabela ysynparamgeral e colocar "S" no parâmetro UTILIZA_FAGLFLEXT_SALMES para gerar os saldos mensais.


Parametrizar a exibição de documentos fiscais do SAP


Parametrizar a exibição de documentos fiscais do SAP

Em corporativo clique em Parâmetros/Parâmetros Gerais/Sistemas em Geral


















Em Sistemas Externos selecione o código SAP...





















... e inclua o calendário fiscal, depois clique no botão ‘PARAMETRIZAÇÃO PARA EXIBIÇÃO DE DOF’.
















Selecione a função ‘FISCAL’, clique em incluir...




















... inclua o sistema ‘SAP’ e as espécies que deseja exibição.