Script de lote - Guia rápido
O Batch Script é incorporado para automatizar as sequências de comandos que são repetitivas por natureza. O script é uma maneira pela qual se pode aliviar essa necessidade, automatizando essas sequências de comandos para tornar a vida no shell mais fácil e produtiva. Na maioria das organizações, o Batch Script é incorporado de uma forma ou de outra para automatizar as coisas.
Alguns dos recursos do Batch Script são -
Pode ler entradas de usuários para que possa ser processado posteriormente.
Possui estruturas de controle como for, if, while, switch para melhor automação e script.
Oferece suporte a recursos avançados, como funções e matrizes.
Suporta expressões regulares.
Pode incluir outros códigos de programação, como Perl.
Alguns dos usos comuns do Batch Script são -
Configurando servidores para diferentes propósitos.
Automatizar atividades de manutenção, como exclusão de arquivos indesejados ou arquivos de log.
Automatizando a implantação de aplicativos de um ambiente para outro.
Instalando programas em várias máquinas ao mesmo tempo.
Os scripts em lote são armazenados em arquivos de texto simples contendo linhas com comandos que são executados em sequência, um após o outro. Esses arquivos têm a extensão especial BAT ou CMD. Os arquivos desse tipo são reconhecidos e executados por meio de uma interface (às vezes chamada de shell) fornecida por um arquivo de sistema chamado interpretador de comandos. Em sistemas Windows, esse interpretador é conhecido como cmd.exe.
Executar um arquivo em lote é uma simples questão de apenas clicar nele. Os arquivos em lote também podem ser executados em um prompt de comando ou na linha Iniciar-Executar. Nesse caso, o nome do caminho completo deve ser usado, a menos que o caminho do arquivo esteja no ambiente do caminho. A seguir está um exemplo simples de um script em lote. Este script em lote, quando executado, exclui todos os arquivos do diretório atual.
:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR
Este capítulo explica o ambiente relacionado ao Batch Script.
Escrita e Execução
Normalmente, para criar um arquivo em lote, o bloco de notas é usado. Esta é a ferramenta mais simples para a criação de arquivos em lote. Em seguida, está o ambiente de execução para os scripts em lote. Em sistemas Windows, isso é feito por meio do prompt de comando ou cmd.exe. Todos os arquivos em lote são executados neste ambiente.
A seguir estão as diferentes maneiras de iniciar o cmd.exe -
Method 1 - Vá para C: \ Windows \ System32 e clique duas vezes no arquivo cmd.
Method 2 - Por meio do comando run - O instantâneo a seguir mostra a localização do prompt de comando (cmd.exe) no Windows server 2012.
Depois que o cmd.exe for iniciado, a tela a seguir será exibida. Este será o seu ambiente para executar seus scripts em lote.
variáveis ambientais
Para executar arquivos em lote a partir do prompt de comando, você precisa ir até o local onde o arquivo em lote está armazenado ou, alternativamente, pode inserir o local do arquivo na variável de ambiente do caminho. Assim, supondo que o arquivo em lote esteja armazenado no local C:\Application\bin
, você precisará seguir estas instruções para a inclusão da variável PATH.
SO | Resultado |
---|---|
janelas | Anexar a string; C:\Application\bin ao final da variável de sistema PATH. |
Neste capítulo, veremos alguns dos comandos em lote usados com freqüência.
S.No | Comandos e descrição |
---|---|
1 | VER Este comando em lote mostra a versão do MS-DOS que você está usando. |
2 | ASSOC Este é um comando em lote que associa uma extensão a um tipo de arquivo (FTYPE), exibe associações existentes ou exclui uma associação. |
3 | CD Este comando em lote ajuda a fazer alterações em um diretório diferente ou exibe o diretório atual. |
4 | CLS Este comando em lote limpa a tela. |
5 | CÓPIA DE Este comando batch é usado para copiar arquivos de um local para outro. |
6 | DEL Este comando em lote exclui arquivos e não diretórios. |
7 | DIR Este comando em lote lista o conteúdo de um diretório. |
8 | ENCONTRO Este comando em lote ajuda a encontrar a data do sistema. |
9 | ECO Este comando em lote exibe mensagens ou ativa ou desativa o eco de comandos. |
10 | SAÍDA Este comando em lote sai do console DOS. |
11 | MD Este comando em lote cria um novo diretório no local atual. |
12 | MOVER Este comando em lote move arquivos ou diretórios entre diretórios. |
13 | CAMINHO Este comando em lote exibe ou define a variável de caminho. |
14 | PAUSA Este comando em lote avisa o usuário e espera que uma linha de entrada seja inserida. |
15 | PRONTO Este comando em lote pode ser usado para alterar ou redefinir o prompt cmd.exe. |
16 | RD Este comando em lote remove diretórios, mas os diretórios precisam estar vazios antes de serem removidos. |
17 | REN Renomeia arquivos e diretórios |
18 | REM Este comando batch é usado para comentários em arquivos batch, evitando que o conteúdo do comentário seja executado. |
19 | COMEÇAR Este comando em lote inicia um programa em uma nova janela ou abre um documento. |
20 | TEMPO Este comando em lote define ou exibe a hora. |
21 | TIPO Este comando em lote imprime o conteúdo de um arquivo ou arquivos na saída. |
22 | VOL Este comando de lote exibe os rótulos de volume. |
23 | ATTRIB Exibe ou define os atributos dos arquivos no diretório curret |
24 | CHKDSK Este comando em lote verifica se há problemas no disco. |
25 | ESCOLHA Este comando em lote fornece uma lista de opções ao usuário. |
26 | CMD Este comando em lote chama outra instância do prompt de comando. |
27 | COMP Este comando em lote compara 2 arquivos com base no tamanho do arquivo. |
28 | CONVERTER Este comando em lote converte um volume do sistema de arquivos FAT16 ou FAT32 para o sistema de arquivos NTFS. |
29 | DRIVERQUERY Este comando em lote mostra todos os drivers de dispositivo instalados e suas propriedades. |
30 | EXPANDIR Este comando em lote extrai arquivos de arquivos de gabinete .cab compactados. |
31 | ENCONTRAR Este comando em lote procura uma string em arquivos ou entrada, gerando linhas correspondentes. |
32 | FORMATO Este comando em lote formata um disco para usar o sistema de arquivos com suporte do Windows, como FAT, FAT32 ou NTFS, substituindo assim o conteúdo anterior do disco. |
33 | SOCORRO Este comando em lote mostra a lista de comandos fornecidos pelo Windows. |
34 | IPCONFIG Este comando em lote exibe a configuração de IP do Windows. Mostra a configuração por conexão e o nome dessa conexão. |
35 | RÓTULO Este comando em lote adiciona, define ou remove um rótulo de disco. |
36 | MAIS Este comando em lote exibe o conteúdo de um arquivo ou arquivos, uma tela por vez. |
37 | INTERNET Fornece vários serviços de rede, dependendo do comando usado. |
38 | PING Este comando em lote envia pacotes de "eco" ICMP / IP pela rede para o endereço designado. |
39 | DESLIGAR Este comando em lote desliga um computador ou faz logoff do usuário atual. |
40 | ORDENAR Este comando em lote obtém a entrada de um arquivo de origem e classifica seu conteúdo em ordem alfabética, de A a Z ou Z a A. Ele imprime a saída no console. |
41 | SUBST Este comando em lote atribui uma letra de unidade a uma pasta local, exibe as atribuições atuais ou remove uma atribuição. |
42 | INFORMAÇÃO DO SISTEMA Este comando em lote mostra a configuração de um computador e seu sistema operacional. |
43 | TASKKILL Este comando em lote termina uma ou mais tarefas. |
44 | LISTA DE TAREFAS Este comando em lote lista tarefas, incluindo nome da tarefa e id do processo (PID). |
45 | XCOPY Este comando em lote copia arquivos e diretórios de uma forma mais avançada. |
46 | ÁRVORE Este comando em lote exibe uma árvore de todos os subdiretórios do diretório atual em qualquer nível de recursão ou profundidade. |
47 | FC Este comando em lote lista as diferenças reais entre dois arquivos. |
48 | DISKPART Este comando em lote mostra e configura as propriedades das partições do disco. |
49 | TÍTULO Este comando em lote define o título exibido na janela do console. |
50 | CONJUNTO Exibe a lista de variáveis de ambiente no sistema atual. |
Neste capítulo, aprenderemos como criar, salvar, executar e modificar arquivos em lote.
Criação de arquivos em lote
Os arquivos em lote são normalmente criados no bloco de notas. Portanto, a maneira mais simples é abrir o bloco de notas e inserir os comandos necessários para o script. Para este exercício, abra o bloco de notas e digite as seguintes instruções.
:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
::
@ECHO OFF
DEL .
DR
Salvando arquivos em lote
Após a criação do arquivo em lote, a próxima etapa é salvá-lo. Os arquivos em lote têm a extensão .bat ou .cmd. Algumas regras gerais a serem lembradas ao nomear arquivos em lote -
Tente evitar espaços ao nomear arquivos em lote, às vezes cria problemas quando eles são chamados de outros scripts.
Não os nomeie com base em arquivos de lote comuns que estão disponíveis no sistema, como ping.cmd.
A captura de tela acima mostra como salvar o arquivo em lote. Ao salvar seu arquivo em lote, alguns pontos a serem considerados.
- Lembre-se de colocar .bat ou .cmd no final do nome do arquivo.
- Escolha a opção “Salvar como tipo” em “Todos os arquivos”.
- Coloque todo o nome do arquivo entre aspas “”.
Executando arquivos em lote
A seguir estão as etapas para executar um arquivo em lote -
Step 1 - Abra o prompt de comando (cmd.exe).
Step 2 - Vá para o local onde o arquivo .bat ou .cmd está armazenado.
Step 3 - Escreva o nome do arquivo conforme mostrado na imagem a seguir e pressione o botão Enter para executar o arquivo em lote.
Modificando arquivos de lote
A seguir estão as etapas para modificar um arquivo em lote existente.
Step 1 - Abra o Windows Explorer.
Step 2 - Vá para o local onde o arquivo .bat ou .cmd está armazenado.
Step 3- Clique com o botão direito no arquivo e escolha a opção “Editar” no menu de contexto. O arquivo será aberto no Bloco de notas para edição posterior.
Normalmente, a primeira linha de um arquivo em lote geralmente consiste no seguinte comando.
Comando ECHO
@echo off
Por padrão, um arquivo em lote exibirá seu comando enquanto é executado. O objetivo deste primeiro comando é desligar esta tela. O comando "echo off" desativa a exibição de todo o script, exceto o próprio comando "echo off". O sinal "arroba" "@" na frente faz com que o comando se aplique a ele mesmo.
Documentação
Freqüentemente, os arquivos em lote também contêm linhas que começam com o comando "Rem". Esta é uma forma de inserir comentários e documentação. O computador ignora qualquer coisa em uma linha após Rem. Para arquivos em lote com complexidade crescente, geralmente é uma boa ideia fazer comentários.
Programa de script de primeiro lote
Vamos construir nosso primeiro programa de script em lote simples. Abra o bloco de notas e digite as seguintes linhas de código. Salve o arquivo como “List.cmd”.
O código faz o seguinte -
Usa o comando echo off para garantir que os comandos não sejam exibidos quando o código for executado.
O comando Rem é usado para adicionar um comentário para dizer o que exatamente esse arquivo em lote faz.
O comando dir é usado para obter o conteúdo da localização C: \ Arquivos de programas.
O comando '>' é usado para redirecionar a saída para o arquivo C: \ lists.txt.
Finalmente, o comando echo é usado para informar ao usuário que a operação foi concluída.
@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"
Quando o comando acima for executado, os nomes dos arquivos em C: \ Arquivos de Programas serão enviados para o arquivo C: \ Lists.txt e no prompt de comando será exibida a mensagem “O programa foi concluído”.
Existem dois tipos de variáveis em arquivos em lote. Um é para parâmetros que podem ser passados quando o arquivo em lote é chamado e o outro é feito por meio do comando set.
Argumentos de linha de comando
Os scripts em lote suportam o conceito de argumentos de linha de comando em que os argumentos podem ser passados para o arquivo em lote quando chamados. Os argumentos podem ser chamados dos arquivos em lote por meio das variáveis% 1,% 2,% 3 e assim por diante.
O exemplo a seguir mostra um arquivo em lote que aceita 3 argumentos de linha de comando e os exibe na tela de linha de comando.
@echo off
echo %1
echo %2
echo %3
Se o script de lote acima estiver armazenado em um arquivo chamado test.bat e formos executar o lote como
Test.bat 1 2 3
A seguir está uma captura de tela de como isso ficaria no prompt de comando quando o arquivo em lote for executado.
O comando acima produz a seguinte saída.
1
2
3
Se tivéssemos que executar o lote como
Example 1 2 3 4
A saída ainda permaneceria a mesma acima. No entanto, o quarto parâmetro seria ignorado.
Set Command
A outra maneira pela qual as variáveis podem ser inicializadas é por meio do comando 'set'. A seguir está a sintaxe do comando set.
Sintaxe
set /A variable-name=value
Onde,
variable-name é o nome da variável que você deseja definir.
value é o valor que precisa ser definido em relação à variável.
/A – Essa opção é usada se o valor precisar ser numérico por natureza.
O exemplo a seguir mostra uma maneira simples de usar o comando set.
Exemplo
@echo off
set message=Hello World
echo %message%
No trecho de código acima, uma variável chamada mensagem é definida e configurada com o valor "Hello World".
Para exibir o valor da variável, observe que a variável precisa estar entre o sinal%.
Resultado
O comando acima produz a seguinte saída.
Hello World
Trabalhando com Valores Numéricos
No script em lote, também é possível definir uma variável para conter um valor numérico. Isso pode ser feito usando a opção / A.
O código a seguir mostra uma maneira simples em que os valores numéricos podem ser definidos com a opção / A.
@echo off
SET /A a = 5
SET /A b = 10
SET /A c = %a% + %b%
echo %c%
Primeiro, estamos definindo o valor de 2 variáveis, aeb para 5 e 10 respectivamente.
Estamos adicionando esses valores e armazenando na variável c.
Finalmente, estamos exibindo o valor da variável c.
A saída do programa acima seria 15.
Todos os operadores aritméticos trabalham em arquivos em lote. O exemplo a seguir mostra que os operadores aritméticos podem ser usados em arquivos em lote.
@echo off
SET /A a = 5
SET /A b = 10
SET /A c = %a% + %b%
echo %c%
SET /A c = %a% - %b%
echo %c%
SET /A c = %b% / %a%
echo %c%
SET /A c = %b% * %a%
echo %c%
O comando acima produz a seguinte saída.
15
-5
2
50
Variáveis locais vs globais
Em qualquer linguagem de programação, existe a opção de marcar as variáveis como tendo algum tipo de escopo, ou seja, a seção do código na qual podem ser acessadas. Normalmente, as variáveis com escopo global podem ser acessadas em qualquer lugar de um programa, enquanto as variáveis com escopo local têm um limite definido no qual podem ser acessadas.
O script DOS também tem uma definição para variáveis com escopo local e global. Por padrão, as variáveis são globais para toda a sua sessão de prompt de comando. Chame o comando SETLOCAL para tornar as variáveis locais para o escopo do seu script. Depois de chamar SETLOCAL, qualquer atribuição de variável é revertida ao chamar ENDLOCAL, chamar EXIT ou quando a execução atinge o fim do arquivo (EOF) em seu script. O exemplo a seguir mostra a diferença quando as variáveis locais e globais são definidas no script.
Exemplo
@echo off
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
Algumas coisas importantes a serem observadas sobre o programa acima.
O 'globalvar' é definido com um escopo global e está disponível em todo o script.
A variável 'var' é definida em um escopo local porque está entre um bloco 'SETLOCAL' e 'ENDLOCAL'. Portanto, esta variável será destruída assim que a instrução 'ENDLOCAL' for executada.
Resultado
O comando acima produz a seguinte saída.
13150
5
Você notará que o comando echo% var% não produzirá nada porque após a instrução ENDLOCAL, a variável 'var' não existirá mais.
Trabalhando com Variáveis de Ambiente
Se você tiver variáveis que seriam usadas em arquivos em lote, é sempre preferível usar variáveis de ambiente. Depois que a variável de ambiente é definida, ela pode ser acessada por meio do sinal%. O exemplo a seguir mostra como ver o JAVA_HOME definido em um sistema. A variável JAVA_HOME é um componente-chave normalmente usado por uma ampla variedade de aplicativos.
@echo off
echo %JAVA_HOME%
A saída mostraria o diretório JAVA_HOME, que dependeria de sistema para sistema. A seguir está um exemplo de uma saída.
C:\Atlassian\Bitbucket\4.0.1\jre
É sempre uma boa prática adicionar comentários ou documentação para os scripts que são criados. Isso é necessário para a manutenção dos scripts para entender o que o script realmente faz.
Por exemplo, considere o seguinte trecho de código, que não tem forma de comentários. Se qualquer pessoa comum que não desenvolveu o script a seguir tentar entendê-lo, demorará muito para essa pessoa entender o que o script realmente faz.
ECHO OFF
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
SETLOCAL
SET WSS=
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND "<03>"')
DO ECHO.%%a %%A
ENDLOCAL
GOTO:EOF
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part
of the computer name^(s^) to be displayed
Comentários usando a declaração Rem
Existem duas maneiras de criar comentários no Batch Script; um é por meio do comando Rem. Qualquer texto que siga a instrução Rem será tratado como comentário e não será executado. A seguir está a sintaxe geral desta instrução.
Sintaxe
Rem Remarks
onde 'Observações' são os comentários que precisam ser adicionados.
O exemplo a seguir mostra uma maneira simples de Rem comando pode ser usado.
Exemplo
@echo off
Rem This program just displays Hello World
set message=Hello World
echo %message%
Resultado
O comando acima produz a seguinte saída. Você notará que a linha com a instrução Rem não será executada.
Hello World
Comentários usando a :: Declaração
A outra maneira de criar comentários no Batch Script é por meio do comando ::. Qualquer texto que siga a instrução :: será tratado como comentário e não será executado. A seguir está a sintaxe geral desta instrução.
Sintaxe
:: Remarks
onde 'Observações' é o comentário que precisa ser adicionado.
O exemplo a seguir mostra o uso do comando "::".
Exemplo
@echo off
:: This program just displays Hello World
set message = Hello World
echo %message%
Resultado
O comando acima produz a seguinte saída. Você notará que a linha com a instrução :: não será executada.
Hello World
Note - Se você tiver muitas linhas de Rem, pode tornar o código mais lento, porque no final cada linha de código no arquivo de lote ainda precisa ser executada.
Vamos examinar o exemplo do grande script que vimos no início deste tópico e ver como fica quando a documentação é adicionada a ele.
::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF
:: Windows version check
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
:: Command line parameter check
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
:: Keep variable local
SETLOCAL
:: Initialize variable
SET WSS=
:: Parse command line parameter
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
:: Use NET VIEW and NBTSTAT to find computers and logged on users
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND
"<03>"') DO ECHO.%%a %%A
:: Done
ENDLOCAL
GOTO:EOF
:Syntax
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the
computer name^(s^) to be displayed
Agora você pode ver que o código se tornou mais compreensível para os usuários que não o desenvolveram e, portanto, é mais fácil de manter.
No DOS, uma string é uma coleção ordenada de caracteres, como "Hello, World!".
S.No | Strings e descrição |
---|---|
1 | Criar String Uma string pode ser criada no DOS da seguinte maneira. |
2 | String vazia String vazia |
3 | Interpolação de String A interpolação de string é uma maneira de construir um novo valor de string a partir de uma mistura de constantes, variáveis, literais e expressões, incluindo seus valores dentro de um literal de string. |
4 | String Concatenation Você pode usar o operador set para concatenar duas strings ou uma string e um caractere ou dois caracteres. A seguir está um exemplo simples que mostra como usar a concatenação de strings. |
5 | Comprimento da corda No script DOS, não há função de comprimento definida para encontrar o comprimento de uma string. Existem funções personalizadas que podem ser usadas para o mesmo. A seguir está um exemplo de uma função definida de forma personalizada para ver o comprimento de uma string. |
6 | toInt Uma variável que foi definida como string usando a variável definida pode ser convertida em um inteiro usando a opção / A que está usando a variável definida. O exemplo a seguir mostra como isso pode ser feito. |
7 | Alinhar à direita Isso é usado para alinhar o texto à direita, o que normalmente é usado para melhorar a legibilidade de colunas numéricas. |
8 | String Esquerda Isso é usado para extrair caracteres do início de uma string. |
9 | Mid String Isso é usado para extrair uma substring por meio da posição dos caracteres na string. |
10 | Retirar O recurso de substituição de string também pode ser usado para remover uma substring de outra string. |
11 | Remover ambas as extremidades Isso é usado para remover o primeiro e o último caractere de uma string. |
12 | Remover todos os espaços Isso é usado para remover todos os espaços em uma string por meio de substituição. |
13 | Substitua uma String Para substituir uma substring por outra string, use o recurso de substituição de string. |
14 | String direita Isso é usado para extrair caracteres do final de uma string. |
Os arrays não são especificamente definidos como um tipo no Batch Script, mas podem ser implementados. Os itens a seguir precisam ser observados quando os arrays são implementados no Batch Script.
- Cada elemento da matriz precisa ser definido com o comando set.
- O loop 'for' seria necessário para iterar os valores da matriz.
Criando um Array
Uma matriz é criada usando o seguinte comando set.
set a[0]=1
Onde 0 é o índice da matriz e 1 é o valor atribuído ao primeiro elemento da matriz.
Outra maneira de implementar arrays é definir uma lista de valores e iterar por meio da lista de valores. O exemplo a seguir mostra como isso pode ser implementado.
Exemplo
@echo off
set list = 1 2 3 4
(for %%a in (%list%) do (
echo %%a
))
Resultado
O comando acima produz a seguinte saída.
1
2
3
4
Acessando matrizes
Você pode recuperar um valor da matriz usando a sintaxe do subscrito, passando o índice do valor que deseja recuperar entre colchetes imediatamente após o nome da matriz.
Exemplo
@echo off
set a[0]=1
echo %a[0]%
Neste exemplo, o índice começa em 0, o que significa que o primeiro elemento pode ser acessado usando o índice como 0, o segundo elemento pode ser acessado usando o índice como 1 e assim por diante. Vamos verificar o seguinte exemplo para criar, inicializar e acessar matrizes -
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
echo The first element of the array is %a[0]%
echo The second element of the array is %a[1]%
echo The third element of the array is %a[2]%
O comando acima produz a seguinte saída.
The first element of the array is 1
The second element of the array is 2
The third element of the array is 3
Modificando um Array
Para adicionar um elemento ao final do array, você pode usar o elemento set junto com o último índice do elemento do array.
Exemplo
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
Rem Adding an element at the end of an array
Set a[3] = 4
echo The last element of the array is %a[3]%
O comando acima produz a seguinte saída.
The last element of the array is 4
Você pode modificar um elemento existente de um Array atribuindo um novo valor em um determinado índice, conforme mostrado no exemplo a seguir -
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
Rem Setting the new value for the second element of the array
Set a[1] = 5
echo The new value of the second element of the array is %a[1]%
O comando acima produz a seguinte saída.
The new value of the second element of the array is 5
Iterando sobre uma matriz
A iteração sobre uma matriz é obtida usando o loop 'for' e passando por cada elemento da matriz. O exemplo a seguir mostra uma maneira simples de implementar um array.
@echo off
setlocal enabledelayedexpansion
set topic[0] = comments
set topic[1] = variables
set topic[2] = Arrays
set topic[3] = Decision making
set topic[4] = Time and date
set topic[5] = Operators
for /l %%n in (0,1,5) do (
echo !topic[%%n]!
)
As seguintes coisas precisam ser observadas sobre o programa acima -
Cada elemento da matriz precisa ser definido especificamente usando o comando set.
O loop 'for' com o parâmetro / L para mover pelos intervalos é usado para iterar através da matriz.
Resultado
O comando acima produz a seguinte saída.
Comments
variables
Arrays
Decision making
Time and date
Operators
Comprimento de uma matriz
O comprimento de uma matriz é feito iterando sobre a lista de valores na matriz, pois não há função direta para determinar o número de elementos em uma matriz.
@echo off
set Arr[0] = 1
set Arr[1] = 2
set Arr[2] = 3
set Arr[3] = 4
set "x = 0"
:SymLoop
if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set /a "x+=1"
GOTO :SymLoop
)
echo "The length of the array is" %x%
Resultado
Saída O comando acima produz a seguinte saída.
The length of the array is 4
Criação de estruturas em matrizes
As estruturas também podem ser implementadas em arquivos em lote usando um pouco de uma codificação extra para implementação. O exemplo a seguir mostra como isso pode ser alcançado.
Exemplo
@echo off
set len = 3
set obj[0].Name = Joe
set obj[0].ID = 1
set obj[1].Name = Mark
set obj[1].ID = 2
set obj[2].Name = Mohan
set obj[2].ID = 3
set i = 0
:loop
if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=
for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name = %cur.Name%
echo Value = %cur.ID%
set /a i = %i%+1
goto loop
As seguintes coisas importantes precisam ser observadas sobre o código acima.
Cada variável definida usando o comando set possui 2 valores associados a cada índice do array.
A variável i é definido como 0 para que possamos percorrer a estrutura com o comprimento da matriz, que é 3.
Sempre verificamos se o valor de i é igual ao valor de len e se não, percorremos o código.
Podemos acessar cada elemento da estrutura usando a notação obj [% i%].
Resultado
O comando acima produz a seguinte saída.
Name = Joe
Value = 1
Name = Mark
Value = 2
Name = Mohan
Value = 3
As estruturas de tomada de decisão requerem que o programador especifique uma ou mais condições a serem avaliadas ou testadas pelo programa, junto com uma instrução ou instruções a serem executadas se a condição for determinada como truee, opcionalmente, outras instruções a serem executadas se a condição for determinada como false.
S.No | Strings e descrição |
---|---|
1 | Declaração If A primeira declaração de tomada de decisão é a declaração 'if'. |
2 | Declaração If / else A próxima declaração de tomada de decisão é a declaração If / else. A seguir está a forma geral desta declaração. |
3 | Instruções aninhadas If Às vezes, é necessário ter várias instruções 'if' incorporadas umas às outras. A seguir está a forma geral desta declaração. |
Um operador é um símbolo que informa ao compilador para executar manipulações matemáticas ou lógicas específicas.
No script em lote, os seguintes tipos de operadores são possíveis.
- Operadores aritméticos
- Operadores relacionais
- Operadores lógicos
- Operadores de atribuição
- Operadores bit a bit
Operadores aritméticos
A linguagem de script em lote oferece suporte aos operadores aritméticos normais como qualquer idioma. A seguir estão os operadores aritméticos disponíveis.
Mostrar exemplo
Operador | Descrição | Exemplo |
---|---|---|
+ | Adição de dois operandos | 1 + 2 dará 3 |
- | Subtrai o segundo operando do primeiro | 2 - 1 dará 1 |
* | Multiplicação de ambos os operandos | 2 * 2 dará 4 |
/ | Divisão do numerador pelo denominador | 3/2 dará 1,5 |
% | Operador de módulo e o restante após uma divisão inteiro / flutuante | 3% 2 dará 1 |
Operadores Relacionais
Operadores relacionais permitem a comparação de objetos. Abaixo estão os operadores relacionais disponíveis.
Mostrar exemplo
Operador | Descrição | Exemplo |
---|---|---|
EQU | Testa a igualdade entre dois objetos | 2 EQU 2 dará verdadeiro |
NEQ | Testa a diferença entre dois objetos | 3 NEQ 2 dará verdadeiro |
LSS | Verifica se o objeto esquerdo é menor que o operando direito | 2 LSS 3 dará verdadeiro |
LEQ | Verifica se o objeto esquerdo é menor ou igual ao operando direito | 2 LEQ 3 dará verdadeiro |
GTR | Verifica se o objeto esquerdo é maior que o operando direito | 3 GTR 2 dará verdadeiro |
GEQ | Verifica se o objeto esquerdo é maior ou igual ao operando direito | 3 GEQ 2 dará verdadeiro |
Operadores lógicos
Operadores lógicos são usados para avaliar expressões booleanas. A seguir estão os operadores lógicos disponíveis.
A linguagem de lote é equipada com um conjunto completo de operadores lógicos booleanos como AND, OR, XOR, mas apenas para números binários. Também não há valores para TRUE ou FALSE. O único operador lógico disponível para as condições é o operador NOT.
Mostrar exemplo
Operador | Descrição |
---|---|
E | Este é o operador lógico “e” |
OU | Este é o operador lógico “ou” |
NÃO | Este é o operador lógico “não” |
Operadores de atribuição
A linguagem Batch Script também fornece operadores de atribuição. A seguir estão os operadores de atribuição disponíveis.
Mostrar exemplo
Operador | Descrição | Exemplo |
---|---|---|
+ = | Isso adiciona o operando direito ao operando esquerdo e atribui o resultado ao operando esquerdo | Defina / A a = 5 a + = 3 A saída será 8 |
- = | Isso subtrai o operando direito do operando esquerdo e atribui o resultado ao operando esquerdo | Defina / A a = 5 a - = 3 A saída será 2 |
* = | Isso multiplica o operando direito com o operando esquerdo e atribui o resultado ao operando esquerdo | Defina / A a = 5 a * = 3 A produção será de 15 |
/ = | Isso divide o operando esquerdo com o operando direito e atribui o resultado ao operando esquerdo | Defina / A a = 6 a / = 3 A saída será 2 |
% = | Isso leva o módulo usando dois operandos e atribui o resultado ao operando esquerdo | Defina / A a = 5 a% = 3 A saída será 2 |
Operadores bit a bit
Operadores bit a bit também são possíveis no script em lote. A seguir estão os operadores disponíveis.
Mostrar exemplo
Operador | Descrição |
---|---|
E | Este é o operador bit a bit “e” |
| | Este é o operador bit a bit “ou” |
^ | Este é o bit a bit “xor” ou Exclusivo ou operador |
A seguir está a tabela verdade mostrando esses operadores.
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
A data e a hora no DOS Scripting têm os dois comandos básicos a seguir para recuperar a data e a hora do sistema.
ENCONTRO
Este comando obtém a data do sistema.
Sintaxe
DATE
Exemplo
@echo off
echo %DATE%
Resultado
A data atual será exibida no prompt de comando. Por exemplo,
Mon 12/28/2015
TEMPO
Este comando define ou exibe a hora.
Sintaxe
TIME
Exemplo
@echo off
echo %TIME%
Resultado
A hora atual do sistema será exibida. Por exemplo,
22:06:52.87
A seguir estão algumas implementações que podem ser usadas para obter a data e a hora em diferentes formatos.
Data no formato ano-mês-dia
Exemplo
@echo off
echo/Today is: %year%-%month%-%day%
goto :EOF
setlocal ENABLEEXTENSIONS
set t = 2&if "%date%z" LSS "A" set t = 1
for /f "skip=1 tokens = 2-4 delims = (-)" %%a in ('echo/^|date') do (
for /f "tokens = %t%-4 delims=.-/ " %%d in ('date/t') do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF
Resultado
O comando acima produz a seguinte saída.
Today is: 2015-12-30
Existem três “arquivos” universais para entrada do teclado, impressão de texto na tela e erros de impressão na tela. O arquivo “Standard In”, conhecido comostdin, contém a entrada para o programa / script. O arquivo “Standard Out”, conhecido comostdout, é usado para gravar a saída para exibição na tela. Finalmente, o arquivo "Erro Padrão", conhecido comostderr, contém todas as mensagens de erro para exibição na tela.
Cada um desses três arquivos padrão, também conhecidos como fluxos padrão, são referenciados usando os números 0, 1 e 2. Stdin é o arquivo 0, stdout é o arquivo 1 e stderr é o arquivo 2.
Redirecionando saída (Stdout e Stderr)
Uma prática comum em arquivos em lote é enviar a saída de um programa para um arquivo de log. O operador> envia ou redireciona stdout ou stderr para outro arquivo. O exemplo a seguir mostra como isso pode ser feito.
Dir C:\ > list.txt
No exemplo acima, o stdout do comando Dir C: \ é redirecionado para o arquivo list.txt.
Se você anexar o número 2 ao filtro de redirecionamento, ele redirecionará o stderr para o arquivo lists.txt.
Dir C:\ 2> list.txt
Pode-se até combinar o stdout e stderrstreams usando o número do arquivo e o prefixo '&'. A seguir está um exemplo.
DIR C:\ > lists.txt 2>&1
Suprimindo a saída do programa
O pseudo arquivo NUL é usado para descartar qualquer saída de um programa. O exemplo a seguir mostra que a saída do comando DIR é descartada enviando a saída para NUL.
Dir C:\ > NUL
Stdin
Para trabalhar com o Stdin, você deve usar uma solução alternativa para conseguir isso. Isso pode ser feito redirecionando o próprio stdin do prompt de comando, chamado CON.
O exemplo a seguir mostra como você pode redirecionar a saída para um arquivo chamado lists.txt. Depois de executar o comando abaixo, o prompt de comando pegará todas as entradas inseridas pelo usuário até obter um caractere EOF. Posteriormente, ele envia todas as entradas para o arquivo lists.txt.
TYPE CON > lists.txt
Por padrão, quando uma execução de linha de comando é concluída, ela deve retornar zero quando a execução for bem-sucedida ou diferente de zero quando a execução falhar. Quando um script em lote retorna um valor diferente de zero depois que a execução falha, o valor diferente de zero indica qual é o número do erro. Em seguida, usaremos o número do erro para determinar o que é o erro e resolvê-lo de acordo.
A seguir estão o código de saída comum e sua descrição.
Erro de código | Descrição |
---|---|
0 | Programa concluído com sucesso. |
1 | Função incorreta. Indica que o Action tentou executar um comando não reconhecido no prompt de comando cmd.exe do Windows. |
2 | O sistema não pode encontrar o arquivo especificado. Indica que o arquivo não pode ser encontrado no local especificado. |
3 | O sistema não consegue encontrar o caminho especificado. Indica que o caminho especificado não pode ser encontrado. |
5 | Acesso negado. Indica que o usuário não tem direito de acesso ao recurso especificado. |
9009 0x2331 |
O programa não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote. Indica que o comando, nome do aplicativo ou caminho foi digitado incorretamente ao configurar a ação. |
221225495 0xC0000017 -1073741801 |
Não há memória virtual suficiente disponível. Isso indica que o Windows ficou sem memória. |
3221225786 0xC000013A -1073741510 |
O aplicativo foi encerrado como resultado de CTRL + C. Indica que o aplicativo foi encerrado pela entrada do teclado do usuário CTRL + C ou CTRL + Break ou fechando a janela do prompt de comando. |
3221225794 0xC0000142 -1073741502 |
A aplicação falhou em iniciar corretamente. Indica que o aplicativo foi iniciado em uma área de trabalho para a qual o usuário atual não tem direitos de acesso. Outra causa possível é a falha na inicialização de gdi32.dll ou user32.dll. |
Nível de Erro
A variável de ambiente% ERRORLEVEL% contém o código de retorno do último programa ou script executado.
Por padrão, a maneira de verificar o ERRORLEVEL é por meio do código a seguir.
Sintaxe
IF %ERRORLEVEL% NEQ 0 (
DO_Something
)
É comum usar o comando EXIT / B% ERRORLEVEL% no final do arquivo em lote para retornar os códigos de erro do arquivo em lote.
EXIT / B no final do arquivo em lote interromperá a execução de um arquivo em lote.
Use EXIT / B <códigos de saída> no final do arquivo em lote para retornar códigos de retorno personalizados.
A variável de ambiente% ERRORLEVEL% contém o nível de erro mais recente no arquivo em lote, que são os códigos de erro mais recentes do último comando executado. No arquivo em lote, é sempre uma boa prática usar variáveis de ambiente em vez de valores constantes, uma vez que a mesma variável é expandida para valores diferentes em computadores diferentes.
Vejamos um exemplo rápido de como verificar códigos de erro em um arquivo em lote.
Exemplo
Vamos supor que temos um arquivo em lote chamado Find.cmd que possui o código a seguir. No código, mencionamos claramente que, se não encontrarmos o arquivo chamado lists.txt, devemos definir o nível de erro para 7. Da mesma forma, se virmos que a variável userprofile não está definida, devemos definir o código de nível de erro para 9
if not exist c:\lists.txt exit 7
if not defined userprofile exit 9
exit 0
Vamos supor que temos outro arquivo chamado App.cmd que chama Find.cmd primeiro. Agora, se Find.cmd retornar um erro em que define o nível de erro como maior que 0, ele sairá do programa. No arquivo em lote a seguir, depois de chamar Find.cnd find, ele realmente verifica se o nível de erro é maior que 0.
Call Find.cmd
if errorlevel gtr 0 exit
echo “Successful completion”
Resultado
No programa acima, podemos ter os seguintes cenários como saída -
Se o arquivo c: \ lists.txt não existir, nada será exibido na saída do console.
Se a variável userprofile não existir, nada será exibido na saída do console.
Se ambas as condições acima forem aprovadas, a string “Conclusão bem-sucedida” será exibida no prompt de comando.
rotações
No capítulo de tomada de decisão, vimos instruções que foram executadas uma após a outra de maneira sequencial. Além disso, as implementações também podem ser feitas em Batch Script para alterar o fluxo de controle na lógica de um programa. Eles são então classificados em declarações de fluxo de controle.
S.No | Loops e descrição |
---|---|
1 | Implementação de declaração While Não há instrução while direta disponível no Batch Script, mas podemos fazer uma implementação desse loop muito facilmente usando a instrução if e rótulos. |
2 | Para declaração - listar implementações A construção "FOR" oferece recursos de loop para arquivos em lote. A seguir está a construção comum da instrução 'for' para trabalhar com uma lista de valores. |
3 | Looping através de Ranges A instrução 'para' também tem a capacidade de se mover por uma gama de valores. A seguir está a forma geral da declaração. |
4 | Clássico para Implementação de Loop A seguir está a declaração clássica 'para' que está disponível na maioria das linguagens de programação. |
Loop por meio de argumentos de linha de comando
A instrução 'for' também pode ser usada para verificar os argumentos da linha de comando. O exemplo a seguir mostra como a instrução 'for' pode ser usada para percorrer os argumentos da linha de comando.
Exemplo
@ECHO OFF
:Loop
IF "%1"=="" GOTO completed
FOR %%F IN (%1) DO echo %%F
SHIFT
GOTO Loop
:completed
Resultado
Vamos supor que nosso código acima esteja armazenado em um arquivo chamado Test.bat. O comando acima produzirá a seguinte saída se o arquivo em lote passar os argumentos da linha de comando de 1,2 e 3 como Test.bat 1 2 3.
1
2
3
S.No | Loops e descrição |
---|---|
1 | Break Statement Implementation A instrução break é usada para alterar o fluxo de controle dentro dos loops em qualquer linguagem de programação. A instrução break é normalmente usada em construções de loop e é usada para causar o encerramento imediato do loop mais interno. |
Uma função é um conjunto de instruções organizadas em conjunto para realizar uma tarefa específica. Em scripts em lote, uma abordagem semelhante é adotada para agrupar instruções lógicas para formar uma função.
Como em qualquer outra linguagem, as funções no Batch Script seguem o mesmo procedimento -
Function Declaration - Diz ao compilador sobre o nome da função, tipo de retorno e parâmetros.
Function Definition - Fornece o corpo real da função.
Definição de Função
No Batch Script, uma função é definida usando a instrução label. Quando uma função é definida de novo, ela pode receber um ou vários valores como 'parâmetros' de entrada para a função, processar as funções no corpo principal e devolver os valores para as funções como 'tipos de retorno' de saída.
Cada função tem um nome de função, que descreve a tarefa que a função executa. Para usar uma função, você "chama" essa função com seu nome e passa seus valores de entrada (conhecidos como argumentos) que correspondem aos tipos de parâmetros da função.
A seguir está a sintaxe de uma função simples.
:function_name
Do_something
EXIT /B 0
O function_name é o nome dado à função que deve ter algum significado para corresponder ao que a função realmente faz.
A instrução EXIT é usada para garantir que a função seja encerrada corretamente.
A seguir está um exemplo de uma função simples.
Exemplo
:Display
SET /A index=2
echo The value of index is %index%
EXIT /B 0
S.No | Funções e descrição |
---|---|
1 | Chamando uma função Uma função é chamada no Batch Script usando o comando call. |
2 | Funções com parâmetros As funções podem trabalhar com parâmetros simplesmente passando-os quando uma chamada é feita para a função. |
3 | Funções com valores de retorno Funções podem trabalhar com valores de retorno simplesmente passando nomes de variáveis |
4 | Variáveis locais em funções Variáveis locais em funções podem ser usadas para evitar conflitos de nome e manter mudanças de variáveis locais para a função. |
5 | Funções Recursivas A capacidade de encapsular completamente o corpo de uma função, mantendo as alterações de variáveis locais para a função e invisíveis para o chamador. |
6 | E / S de arquivo No Batch Script, é possível realizar as operações normais de E / S de arquivo que seriam esperadas em qualquer linguagem de programação. |
7 | Criação de arquivos A criação de um novo arquivo é feita com a ajuda do filtro de redirecionamento>. Este filtro pode ser usado para redirecionar qualquer saída para um arquivo. |
8 | Escrevendo em arquivos A gravação de conteúdo em arquivos também é feita com a ajuda do filtro de redirecionamento>. Este filtro pode ser usado para redirecionar qualquer saída para um arquivo. |
9 | Anexando a arquivos A gravação de conteúdo em arquivos também é feita com a ajuda do filtro de duplo redirecionamento >>. Este filtro pode ser usado para anexar qualquer saída a um arquivo. |
10 | Lendo de arquivos A leitura de arquivos em um script em lote é feita usando o comando de loop FOR para percorrer cada linha definida no arquivo que precisa ser lido. |
11 | Excluindo Arquivos Para deletar arquivos, o Batch Script fornece o comando DEL. |
12 | Renomeando arquivos Para renomear arquivos, o Batch Script fornece o comando REN ou RENAME. |
13 | Movendo arquivos Para mover arquivos, o Batch Script fornece o comando MOVE. |
14 | Arquivos de lote - Pipes O operador de pipe (|) pega a saída (por padrão, STDOUT) de um comando e a direciona para a entrada (por padrão, STDIN) de outro comando. |
15 | Arquivos em lote - entradas Quando um arquivo em lote é executado, ele oferece a opção de passar parâmetros de linha de comando que podem ser lidos no programa para processamento posterior. |
16 | Usando o operador SHIFT Uma das limitações dos argumentos da linha de comando é que ele pode aceitar apenas argumentos até% 9. Vamos dar um exemplo dessa limitação. |
17 | Pastas No Batch Script, é possível realizar as operações normais baseadas em pastas que seriam esperadas em qualquer linguagem de programação. |
18 | Criação de pastas A criação de uma pasta é feita com o auxílio do comando MD (Criar diretório). |
19 | Listando o conteúdo da pasta A listagem do conteúdo da pasta pode ser feita com o comando dir. Este comando permite que você veja os arquivos e diretórios disponíveis no diretório atual. |
20 | Excluindo Pastas Para excluir pastas, o Batch Scripting fornece o comando DEL. |
21 | Renomeando Pastas Para renomear pastas, o Batch Script fornece o comando REN ou RENAME. |
22 | Movendo pastas Para mover pastas, o Batch Script fornece o comando MOVE. |
Neste capítulo, discutiremos os vários processos envolvidos no Batch Script.
Ver a lista de processos em execução
No Batch Script, o comando TASKLIST pode ser usado para obter a lista dos processos atualmente em execução em um sistema.
Sintaxe
TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]
S.No. | Opções e descrição |
---|---|
1 | /S system Especifica o sistema remoto para se conectar |
2 | /U [domain\]user Especifica o contexto do usuário sob o qual o comando deve ser executado. |
3 - | /P [password] Especifica a senha para o contexto de usuário fornecido. Solicita entrada se omitido. |
4 - | /M [module] Lista todas as tarefas atualmente usando o nome exe / dll fornecido. Se o nome do módulo não for especificado, todos os módulos carregados serão exibidos. |
5 | /SVC Exibe serviços hospedados em cada processo. |
6 | /V Exibe informações detalhadas da tarefa. |
7 | /FI filter Exibe um conjunto de tarefas que correspondem a um determinado critério especificado pelo filtro. |
8 | /FO format Especifica o formato de saída. Valores válidos: "TABLE", "LIST", "CSV". |
9 | /NH Especifica que o "Cabeçalho da coluna" não deve ser mostrado na saída. Válido apenas para os formatos "TABLE" e "CSV". |
Exemplos
TASKLIST
O comando acima obterá a lista de todos os processos em execução em seu sistema local. A seguir está um instantâneo da saída que é renderizada quando o comando acima é executado como está. Como você pode ver na saída a seguir, não apenas obtém os vários processos em execução no sistema, mas também obtém o uso de memória de cada processo.
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 4 K
System 4 Services 0 272 K
smss.exe 344 Services 0 1,040 K
csrss.exe 528 Services 0 3,892 K
csrss.exe 612 Console 1 41,788 K
wininit.exe 620 Services 0 3,528 K
winlogon.exe 648 Console 1 5,884 K
services.exe 712 Services 0 6,224 K
lsass.exe 720 Services 0 9,712 K
svchost.exe 788 Services 0 10,048 K
svchost.exe 832 Services 0 7,696 K
dwm.exe 916 Console 1 117,440 K
nvvsvc.exe 932 Services 0 6,692 K
nvxdsync.exe 968 Console 1 16,328 K
nvvsvc.exe 976 Console 1 12,756 K
svchost.exe 1012 Services 0 21,648 K
svchost.exe 236 Services 0 33,864 K
svchost.exe 480 Services 0 11,152 K
svchost.exe 1028 Services 0 11,104 K
svchost.exe 1048 Services 0 16,108 K
wlanext.exe 1220 Services 0 12,560 K
conhost.exe 1228 Services 0 2,588 K
svchost.exe 1276 Services 0 13,888 K
svchost.exe 1420 Services 0 13,488 K
spoolsv.exe 1556 Services 0 9,340 K
tasklist > process.txt
O comando acima pega a saída exibida pela lista de tarefas e salva no arquivo process.txt.
tasklist /fi "memusage gt 40000"
O comando acima irá buscar apenas os processos cuja memória seja maior que 40 MB. A seguir está um exemplo de saída que pode ser renderizado.
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
dwm.exe 916 Console 1 127,912 K
explorer.exe 2904 Console 1 125,868 K
ServerManager.exe 1836 Console 1 59,796 K
WINWORD.EXE 2456 Console 1 144,504 K
chrome.exe 4892 Console 1 123,232 K
chrome.exe 4976 Console 1 69,412 K
chrome.exe 1724 Console 1 76,416 K
chrome.exe 3992 Console 1 56,156 K
chrome.exe 1168 Console 1 233,628 K
chrome.exe 816 Console 1 66,808 K
Matando um Processo Particular
Permite que um usuário executando o Microsoft Windows XP Professional, Windows 2003 ou posterior elimine uma tarefa de uma linha de comando do Windows por ID de processo (PID) ou nome de imagem. O comando usado para este propósito é o comando TASKILL.
Sintaxe
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter]
[/PID processid | /IM imagename] } [/T] [/F]
S.No. | Opções e descrição |
---|---|
1 | /S system Especifica o sistema remoto para se conectar |
2 | /U [domain\]user Especifica o contexto do usuário sob o qual o comando deve ser executado. |
3 - | /P [password] Especifica a senha para o contexto de usuário fornecido. Solicita entrada se omitido. |
4 - | /FI FilterName Aplica um filtro para selecionar um conjunto de tarefas. Permite que "*" seja usado. ex. imagename eq acme * Consulte os filtros abaixo para obter informações adicionais e exemplos. |
5 | /PID processID Especifica o PID do processo a ser encerrado. Use TaskList para obter o PID. |
6 | /IM ImageName Especifica o nome da imagem do processo a ser encerrado. O curinga '*' pode ser usado para especificar todas as tarefas ou nomes de imagem. |
7 | /T Encerra o processo especificado e todos os processos filho iniciados por ele. |
8 | /F Especifica o encerramento forçado do (s) processo (s). |
Exemplos
taskkill /f /im notepad.exe
O comando acima elimina a tarefa aberta do bloco de notas, se aberta.
taskill /pid 9214
O comando acima mata um processo que tem um processo de 9214.
Iniciando um Novo Processo
O script DOS também tem a disponibilidade de iniciar um novo processo. Isso é feito usando o comando START.
Sintaxe
START "title" [/D path] [options] "command" [parameters]
Em que
title - Texto para a barra de título da janela CMD (obrigatório).
path - Diretório inicial.
command - O comando, arquivo em lote ou programa executável a ser executado.
parameters - Os parâmetros passados para o comando.
S.No. | Opções e descrição |
---|---|
1 | /MIN Janela inicial minimizada |
2 | /MAX Janela inicial maximizada. |
3 - | /LOW Use a classe de prioridade IDLE. |
4 - | /NORMAL Use a classe de prioridade NORMAL. |
5 | /ABOVENORMAL Use a classe de prioridade ABOVENORMAL. |
6 | /BELOWNORMAL Use a classe de prioridade BELOWNORMAL. |
7 | /HIGH Use a classe de alta prioridade. |
8 | /REALTIME Use a classe de prioridade REALTIME. |
Exemplos
START "Test Batch Script" /Min test.bat
O comando acima executará o script em lote test.bat em uma nova janela. As janelas iniciarão no modo minimizado e também terão o título de “Script de lote de teste”.
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
O comando acima irá realmente executar o Microsoft Word em outro processo e então abrir o arquivo TESTA.txt no MS Word.
Aliases significa criar atalhos ou palavras-chave para comandos existentes. Suponha que se quiséssemos executar o comando abaixo, que nada mais é do que o comando de listagem de diretório com a opção / w para não mostrar todos os detalhes necessários em uma listagem de diretório.
Dir /w
Suponha que criemos um atalho para este comando da seguinte maneira.
dw = dir /w
Quando queremos executar o dir /w comando, podemos simplesmente digitar a palavra dw. A palavra 'dw' agora se tornou um alias para o comando Dir / w.
Criando um Alias
Alias são gerenciados usando o doskey comando.
Sintaxe
DOSKEY [options] [macroname=[text]]
Em que
macroname - Um nome curto para a macro.
text - Os comandos que você deseja recuperar.
A seguir estão as descrições das opções que podem ser apresentadas ao comando DOSKEY.
S.No. | Opções e descrição |
---|---|
1 | /REINSTALL Instala uma nova cópia do Doskey |
2 | /LISTSIZE = size Define o tamanho do buffer do histórico de comandos. |
3 - | /MACROS Exibe todas as macros do Doskey. |
4 - | /MACROS:ALL Exibe todas as macros do Doskey para todos os executáveis que possuem macros do Doskey. |
5 | /MACROS:exename Exibe todas as macros do Doskey para o determinado executável. |
6 | /HISTORY Exibe todos os comandos armazenados na memória. |
7 | /INSERT Especifica que o novo texto digitado é inserido no texto antigo. |
8 | /OVERSTRIKE Especifica que o novo texto substitui o texto antigo. |
9 | /EXENAME = exename Especifica o executável. |
10 | /MACROFILE = filename Especifica um arquivo de macros a instalar. |
11 | macroname Especifica um nome para uma macro que você cria. |
12 | text Especifica os comandos que você deseja gravar. |
Exemplo
Crie um novo arquivo chamado keys.bat e digite os seguintes comandos no arquivo. Os comandos a seguir criam dois aliases, um para o comando cd, que vai automaticamente para o diretório chamado test. E o outro é para o comando dir.
@echo off
doskey cd = cd/test
doskey d = dir
Depois de executar o comando, você será capaz de executar esses aliases no prompt de comando.
Resultado
A imagem a seguir mostra que, após a execução do arquivo em lote criado acima, você pode inserir livremente o comando 'd' e ele lhe dará a lista de diretórios, o que significa que seu apelido foi criado.
Excluindo um Alias
Um alias ou macro pode ser excluído definindo o valor da macro como NULL.
Exemplo
@echo off
doskey cd = cd/test
doskey d = dir
d=
No exemplo acima, estamos primeiro configurando a macro d para d = dir. Depois disso, estamos definindo-o como NULL. Como definimos o valor de d como NULL, a macro d será excluída.
Substituindo um Alias
Um alias ou macro pode ser substituído definindo o valor da macro para o novo valor desejado.
Exemplo
@echo off
doskey cd = cd/test
doskey d = dir
d = dir /w
No exemplo acima, estamos primeiro configurando a macro d para d = dir. Depois disso, vamos defini-lo como dir / w. Como definimos o valor de d com um novo valor, o alias 'd' agora assumirá o novo valor.
O Windows agora tem uma biblioteca aprimorada que pode ser usada no Batch Script para trabalhar com dispositivos conectados ao sistema. Isso é conhecido como console do dispositivo - DevCon.exe.
Os desenvolvedores e testadores de driver do Windows podem usar o DevCon para verificar se um driver está instalado e configurado corretamente, incluindo os arquivos INF adequados, pilha de driver, arquivos de driver e pacote de driver. Você também pode usar os comandos DevCon (ativar, desativar, instalar, iniciar, parar e continuar) em scripts para testar o driver.DevCon é uma ferramenta de linha de comando que executa funções de gerenciamento de dispositivos em computadores locais e remotos.
Exibir driver e informações de dispositivo O DevCon pode exibir as seguintes propriedades de drivers e dispositivos em computadores locais e remotos (executando o Windows XP e anteriores) -
IDs de hardware, IDs compatíveis e IDs de instância de dispositivo. Esses identificadores são descritos em detalhes nas sequências de identificação do dispositivo.
Classes de configuração de dispositivos.
Os dispositivos em uma classe de configuração de dispositivo.
Arquivos INF e arquivos de driver de dispositivo.
Detalhes dos pacotes de drivers.
Recursos de hardware.
Status do dispositivo.
Pilha de driver esperada.
Pacotes de driver de terceiros no armazenamento de driver.
Pesquisar dispositivos O DevCon pode pesquisar dispositivos instalados e desinstalados em um computador local ou remoto por ID de hardware, ID de instância de dispositivo ou classe de configuração de dispositivo.
Alterar as configurações do dispositivo O DevCon pode alterar o status ou a configuração dos dispositivos Plug and Play (PnP) no computador local das seguintes maneiras:
Habilite um dispositivo.
Desative um dispositivo.
Atualizar drivers (interativos e não interativos).
Instale um dispositivo (crie um devnode e instale o software).
Remova um dispositivo da árvore de dispositivos e exclua sua pilha de dispositivos.
Verifique novamente os dispositivos Plug and Play.
Adicione, exclua e reordene os IDs de hardware dos dispositivos enumerados pela raiz.
Altere os drivers de filtro superior e inferior para uma classe de configuração de dispositivo.
Adicione e exclua pacotes de driver de terceiros do armazenamento de driver.
DevCon (DevCon.exe) é incluído quando você instala o WDK, Visual Studio e o Windows SDK para aplicativos de desktop. O kit DevCon.exe está disponível nos seguintes locais quando instalado.
%WindowsSdkDir%\tools\x64\devcon.exe
%WindowsSdkDir%\tools\x86\devcon.exe
%WindowsSdkDir%\tools\arm\devcon.exe
Sintaxe
devcon [/m:\\computer] [/r] command [arguments]
em que
/m:\\computer- Executa o comando no computador remoto especificado. As barras invertidas são obrigatórias.
/r- Reinicialização condicional. Reinicializa o sistema após a conclusão de uma operação apenas se uma reinicialização for necessária para tornar efetiva uma alteração.
command - Especifica um comando DevCon.
Para listar e exibir informações sobre dispositivos no computador, use os seguintes comandos -
DevCon HwIDs
Classes DevCon
DevCon ListClass
DevCon DriverFiles
DevCon DriverNodes
Recursos DevCon
DevCon Stack
Status DevCon
DevCon Dp_enum
Para pesquisar informações sobre dispositivos no computador, use os seguintes comandos -
DevCon Find
DevCon FindAll
Para manipular o dispositivo ou alterar sua configuração, use os seguintes comandos -
DevCon Enable
DevCon Disable
Atualização DevCon
DevCon UpdateNI
DevCon Install
DevCon Remover
DevCon Rescan
DevCon Restart
DevCon Reboot
DevCon SetHwID
DevCon ClassFilter
DevCon Dp_add
DevCon Dp_delete
Exemplos
A seguir estão alguns exemplos de como o comando DevCon é usado.
List all driver files
O comando a seguir usa a operação DevCon DriverFiles para listar os nomes de arquivo dos drivers usados pelos dispositivos do sistema. O comando usa o caractere curinga (*) para indicar todos os dispositivos no sistema. Como a saída é extensa, o comando usa o caractere de redirecionamento (>) para redirecionar a saída para um arquivo de referência, driverfiles.txt.
devcon driverfiles * > driverfiles.txt
O comando a seguir usa a operação de status DevCon para localizar o status de todos os dispositivos no computador local. Em seguida, ele salva o status no arquivo status.txt para registro ou revisão posterior. O comando usa o caractere curinga (*) para representar todos os dispositivos e o caractere de redirecionamento (>) para redirecionar a saída para o arquivo status.txt.
devcon status * > status.txt
O comando a seguir ativa todos os dispositivos de impressora no computador, especificando a classe de configuração da impressora em um comando DevCon Enable. O comando inclui o parâmetro / r, que reinicializa o sistema se for necessário para tornar a ativação efetiva.
devcon /r enable = Printer
O comando a seguir usa a operação DevCon Install para instalar um dispositivo de teclado no computador local. O comando inclui o caminho completo para o arquivo INF do dispositivo (keyboard.inf) e uma ID de hardware (* PNP030b).
devcon /r install c:\windows\inf\keyboard.inf *PNP030b
O comando a seguir fará a varredura no computador em busca de novos dispositivos.
devcon scan
O comando a seguir fará uma nova varredura no computador em busca de novos dispositivos.
devcon rescan
O registro é um dos elementos-chave em um sistema Windows. Ele contém muitas informações sobre vários aspectos do sistema operacional. Quase todos os aplicativos instalados em um sistema Windows interagem com o registro de uma forma ou de outra.
O Registro contém dois elementos básicos: chaves e valores. Registry keys são objetos de contêiner semelhantes a pastas. Registry valuessão objetos não contêiner semelhantes a arquivos. As chaves podem conter valores ou outras chaves. As chaves são referenciadas com uma sintaxe semelhante aos nomes de caminho do Windows, usando barras invertidas para indicar níveis de hierarquia.
Este capítulo examina várias funções, como consulta de valores, adição, exclusão e edição de valores do registro.
S.No | Tipos de registro e descrição |
---|---|
1 | Lendo do Registro A leitura do registro é feita por meio do comando REG QUERY. |
2 | Adicionando ao Registro A adição ao registro é feita por meio do comando REG ADD. |
3 | Excluindo do Registro A exclusão do registro é feita por meio do comando REG DEL. |
4 | Copiando chaves de registro A cópia do registro é feita por meio do comando REG COPY. |
5 | Comparando Chaves de Registro A comparação das chaves do registro é feita por meio do comando REG COMPARE. |
O script em lote tem a facilidade de trabalhar com configurações de rede. O comando NET é usado para atualizar, corrigir ou visualizar a rede ou as configurações de rede. Este capítulo examina as diferentes opções disponíveis para o comando net.
S.No | Comandos e descrição do NET |
---|---|
1 | CONTAS LÍQUIDAS Visualize a senha atual e as restrições de logon do computador. |
2 | NET CONFIG Exibe as configurações atuais do servidor ou do grupo de trabalho. |
3 | NET COMPUTER Adiciona ou remove um computador conectado ao controlador de domínio do Windows. |
4 | NET USER Este comando pode ser usado para o seguinte Visualize os detalhes de uma conta de usuário específica. |
5 | NET STOP / START Este comando é usado para parar e iniciar um serviço específico. |
6 | NET STATISTICS Exibir estatísticas de rede da estação de trabalho ou servidor. |
7 | USO DE REDE Conecta ou desconecta seu computador de um recurso compartilhado ou exibe informações sobre suas conexões. |
A impressão também pode ser controlada a partir do Batch Script por meio do comando NET PRINT.
Sintaxe
PRINT [/D:device] [[drive:][path]filename[...]]
Onde / D: dispositivo - especifica um dispositivo de impressão.
Exemplo
print c:\example.txt /c /d:lpt1
O comando acima imprimirá o arquivo example.txt na porta paralela lpt1.
Controle de impressora de linha de comando
A partir do Windows 2000, muitas, mas não todas, as configurações da impressora podem ser definidas na linha de comando do Windows usando PRINTUI.DLL e RUNDLL32.EXE
Sintaxe
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]
Onde algumas das opções disponíveis são as seguintes -
/dl - Exclua a impressora local.
/dn - Exclua a conexão da impressora de rede.
/dd - Exclua o driver da impressora.
/e - Exibir preferências de impressão.
/f[file] - Arquivo inf ou arquivo de saída.
/F[file] - Localização de um arquivo INF do qual o arquivo INF especificado com / f pode depender.
/ia - Instale o driver da impressora usando o arquivo inf.
/id - Instale o driver da impressora usando o assistente para adicionar driver de impressora.
/if - Instale a impressora usando o arquivo inf.
/ii - Instale a impressora usando o assistente para adicionar impressora com um arquivo inf.
/il - Instale a impressora usando o assistente para adicionar impressora.
/in - Adicionar conexão de impressora de rede.
/ip - Instale a impressora usando o assistente de instalação de impressora de rede.
/k - Imprimir página de teste na impressora especificada, não pode ser combinada com o comando ao instalar uma impressora.
/l[path] - Caminho de origem do driver da impressora.
/m[model] - Nome do modelo do driver da impressora.
/n[name] - Nome da impressora.
/o - Exibir visualização da fila da impressora.
/p - Exibir propriedades da impressora.
/Ss - Armazene as configurações da impressora em um arquivo.
/Sr - Restaure as configurações da impressora a partir de um arquivo.
/y - Defina a impressora como padrão.
/Xg - Obtenha as configurações da impressora.
/Xs - Defina as configurações da impressora.
Testando se existe uma impressora
Pode haver casos em que você pode estar conectado a uma impressora de rede em vez de uma impressora local. Nesses casos, é sempre bom verificar se existe uma impressora antes de imprimir.
A existência de uma impressora pode ser avaliada com a ajuda do RUNDLL32.EXE PRINTUI.DLL, que é usado para controlar a maioria das configurações da impressora.
Exemplo
SET PrinterName = Test Printer
SET file=%TEMP%\Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%file%" /q
IF EXIST "%file%" (
ECHO %PrinterName% printer exists
) ELSE (
ECHO %PrinterName% printer does NOT exists
)
O comando acima fará o seguinte -
Ele definirá primeiro o nome da impressora e um nome de arquivo que conterá as configurações da impressora.
Os comandos RUNDLL32.EXE PRINTUI.DLL serão usados para verificar se a impressora realmente existe, enviando as definições de configuração do arquivo para o arquivo Prt.txt
Muitas vezes, você pode ter problemas ao executar arquivos em lote e, na maioria das vezes, você precisa depurar seus arquivos em lote de uma forma ou de outra para determinar o problema com o próprio arquivo em lote. A seguir estão algumas das técnicas que podem ajudar na depuração de arquivos Batch Script.
Mensagens de erro
Para descobrir a origem da mensagem, siga estas etapas -
Step 1 - REM para fora da linha @ECHO OFF, ou seja, REM @ECHO OFF ou :: @ECHO OFF.
Step 2 - Execute o arquivo em lote com os parâmetros de linha de comando necessários, redirecionando todas as saídas para um arquivo de log para comparação posterior.
test.bat > batch.log 2>&1
Step 3 - Procure no arquivo batch.log as mensagens de erro
Step 4- Verifique a linha anterior para qualquer comando inesperado ou inválido, troca (es) de linha de comando ou valor (es); preste atenção especial aos valores de quaisquer variáveis de ambiente usadas no comando.
Step 5 - Corrija o erro e repita este processo até que todas as mensagens de erro tenham desaparecido.
Linhas de Comando Complexas
Outra fonte comum de erros são comandos redirecionados incorretamente, como, por exemplo, comandos FIND ou FINDSTR "aninhados" com strings de pesquisa incorretas, às vezes em um loop FOR / F.
Para verificar a validade desses comandos complexos, siga estas etapas -
Step 1 - Insira "linhas de verificação de comando" antes de uma linha que usa o conjunto de comandos complexo.
A seguir está um exemplo em que o comando ECHO é inserido para marcar onde a saída do primeiro comando TYPE termina e o próximo começa.
TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
Step 2 - Siga o procedimento para encontrar as fontes de mensagens de erro descritas acima.
Step 3- Preste atenção especial à saída das linhas de comando "simplificadas": a saída está no formato esperado? O valor ou posição do "token" está conforme o esperado?
Sub-rotinas
As sub-rotinas que geram mensagens de erro representam um "desafio" extra para encontrar a causa do erro, pois podem ser chamadas várias vezes no mesmo arquivo em lote.
Para ajudar a descobrir o que causa a chamada incorreta para a sub-rotina, siga estas etapas -
Step 1 - Adicionar e redefinir uma variável de contador no início do script -
SET Counter = 0
Step 2 - Incrementar o contador cada vez que a sub-rotina é chamada, inserindo a seguinte linha no início da sub-rotina
SET /A Counter+=1
Step 3- Inserir outra linha logo após o incremento do contador, contendo apenas o comando SET; isso listará todas as variáveis de ambiente e seus valores.
Step 4 - Siga o procedimento para encontrar as fontes de mensagens de erro descritas acima.
Versões do Windows
Se você pretende distribuir seus arquivos em lote para outros computadores que podem ou não executar a mesma versão do Windows, você precisará testar seus arquivos em lote no maior número possível de versões do Windows.
O exemplo a seguir mostra como verificar várias versões do sistema operacional para verificar as versões relevantes do Windows.
@ECHO OFF
:: Check for Windows NT 4 and later
IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT
:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only
O login é possível no Batch Script usando o comando de redirecionamento.
Sintaxe
test.bat > testlog.txt 2> testerrors.txt
Exemplo
Crie um arquivo chamado test.bat e digite o seguinte comando no arquivo.
net statistics /Server
O comando acima tem um erro porque a opção para o comando net statistics é fornecida de maneira errada.
Resultado
Se o comando com o arquivo test.bat acima for executado como
test.bat > testlog.txt 2> testerrors.txt
E você abre o arquivo testerrors.txt, você verá o seguinte erro.
The option /SERVER is unknown.
A sintaxe deste comando é -
NET STATISTICS
[WORKSTATION | SERVER]
Mais ajuda está disponível digitando NET HELPMSG 3506.
Se você abrir o arquivo chamado testlog.txt, ele mostrará um registro de quais comandos foram executados.
C:\tp>net statistics /Server