C:\WINDOWS>HELP SET
Exibe, define ou remove variáveis de ambiente do cmd.exe.
SET
[variável=
[cadeia_de_caracteres
]]variável Especifica o nome da variável de ambiente.
cadeia_de_caracteres Especifica uma série de caracteres a serem
atribuídos à variável.
Digite SET sem parâmetros para exibir as variáveis de ambiente atuais.
Se as extensões de comando estiverem ativadas, SET será alterado como a
seguir:
O comando SET chamado com apenas um nome de variável, nenhum sinal de igual
ou valor exibirá o valor de todas as variáveis cujo prefixo corresponda ao
nome
fornecido ao comando SET. Por exemplo:
SET P
exibiria todas as variáveis começando com a letra 'P'
O comando SET definirá o ERRORLEVEL como 1 se o nome da variável não for
encontrado no ambiente atual.
O comando SET não permitirá que um sinal de igual seja parte do nome de
uma variável.
Duas novas opções foram adicionadas ao comando SET:
SET /A expressão
SET /P variável=
[cadeia_do_prompt
]A opção /A especifica que a cadeia de caracteres à direita do sinal de igual
é uma expressão numérica que é avaliada. O avaliador da expressão
é muito simples e dá suporte às seguintes operações, em ordem
decrescente de precedência:
() - 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
Se você usar qualquer um dos operadores lógicos ou de módulo, precisará
colocar a cadeia de caracteres da expressão entre aspas. Qualquer
cadeia de caracteres não numérica na expressão é tratada como nomes
de variável de ambiente cujos valores são convertidos para números antes
de serem usados. Se um nome de variável de ambiente for especificado,
mas não estiver definido no ambiente atual, será usado um valor de zero.
Isso permite fazer aritmética com valores de variáveis de ambiente, sem ter
de
digitar todos esses sinais de % para obter os valores. Se SET /A
for executado a partir da linha de comando fora de um script de comando,
ele exibirá o valor final da expressão. O operador de atribuição requer um
nome de variável de ambiente à sua esquerda. Os valores numéricos
são valores decimais, a menos que sejam antecedidos por 0x para números
hexadecimais e 0 para números octais. Portanto, 0x12 é o mesmo que 18
e o mesmo que 022. Observe que a notação octal pode causar confusão: 08 e 09
não são números válidos porque 8 e
9 não são dígitos octais válidos.
A opção /P permite definir o valor de uma variável para uma linha de entrada
digitada pelo usuário. Exibe a cadeia de caracteres do prompt especificada
antes de ler
a linha de entrada. A cadeia de caracteres do prompt pode estar vazia.
A substituição da variável de ambiente foi aprimorada da seguinte forma:
%PATH:seq1=seq2%
expandiria a variável de ambiente PATH, substituindo cada ocorrência de
"seq1"
no resultado expandido por "seq2". "Seq2" pode ser a cadeia de caracteres
vazia para excluir efetivamente todas as ocorrências de "seq1" da saída
expandida. "seq1" pode começar com um asterisco e, neste caso, corresponderia
a tudo desde o início da saída expandida até a primeira ocorrência da parte
restante de seq1.
Também pode especificar subcadeias de caracteres para uma expansão.
%PATH:~10,5%
expandiria a variável de ambiente PATH e usaria apenas os 5 caracteres
que começassem no caractere 11 (deslocamento 10) do resultado expandido.
Se o comprimento não for especificado, será padronizado como o restante
do valor da variável. Se qualquer um dos números (deslocamento ou
comprimento)
for negativo, o número usado será o comprimento do valor da variável
de ambiente adicionado ao deslocamento ou comprimento especificado.
%PATH:~-10%
extrairia os últimos 10 da variável PATH.
%PATH:~0,-2%
extrairia todos os caracteres da variável PATH, com exceção dos 2 últimos.
Finalmente, foi adicionado o suporte à expansão de variáveis de ambiente
atrasada. Esse suporte está sempre desativado por padrão, mas pode ser
ativado/desativado através da opção da linha de comando /V do CMD.EXE.
Consulte CMD /?
A expansão de variáveis de ambiente atrasada é útil para contornar
as limitações da expansão atual que ocorre quando uma linha
de texto é lida, e não quando é executada. O exemplo a seguir
demonstra o problema com a expansão de variável imediata:
set VAR=antes
if "%VAR%" == "antes" (
set VAR=depois
if "%VAR%" == "depois" @echo Se você ler isto, terá funcionado
)
nunca exibiria a mensagem, já que %VAR% em AMBAS as instruções IF
é substituído quando a primeira instrução IF é lida, pois inclui
logicamente o corpo do IF, que é uma instrução composta. Portanto, o
IF dentro da instrução composta está realmente comparando "antes" com
"depois", que nunca será igual. Da mesma forma, o exemplo a seguir
não funcionará como esperado:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
porque NÃO criará uma lista de arquivos na pasta atual mas,
em vez disso, apenas definirá a variável LIST como o último arquivo
encontrado.
Novamente, isso ocorre porque a %LIST% é expandida apenas uma vez
quando a instrução FOR é lida, e nesse momento a variável LIST está vazia.
Portanto, o loop FOR que está de fato sendo executado é:
for %i in (*) do set LIST= %i
que apenas continua definindo LIST como o último arquivo encontrado.
A expansão de variáveis de ambiente atrasada permite usar um caractere
diferente (o ponto de exclamação) para expandir variáveis de ambiente no
tempo de execução. Se a expansão de variáveis atrasada estiver ativada,
os exemplos acima poderão ser escritos da seguinte forma para funcionar
como o desejado:
set VAR=antes
if "%VAR%" == "antes" (
set VAR=depois
if "!VAR!" == "depois" @echo Se você ler isto, terá funcionado
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Se as extensões de comando estiverem ativadas, haverá diversas variáveis
de ambiente dinâmicas que poderão ser expandidas, mas que não aparecerão na
lista de variáveis exibida pelo SET. Esses valores de variáveis são
computados dinamicamente sempre que o valor da variável é expandido.
Se o usuário definir explicitamente uma variável com um desses nomes,
essa definição substituirá a definição dinâmica descrita abaixo:
%CD% - expande para a cadeia de caracteres da pasta atual.
%DATE% - expande para a data atual usando o mesmo formato que o comando DATE.
%TIME% - expande para a hora atual usando o mesmo formato que o comando TIME.
%RANDOM% - expande para um número decimal aleatório entre 0 e 32767.
%ERRORLEVEL% - expande para o valor ERRORLEVEL atual
%CMDEXTVERSION% - expande para o número da versão das extensões do
processador de comandos atual.
%CMDCMDLINE% - expande para a linha de comando original que chamou o
processador de comandos.
C:\WINDOWS>HELP SETLOCAL
Inicia a localização das alterações de ambiente em um arquivo em lotes.
As alterações de ambiente feitas após SETLOCAL ser emitido são específicas
do arquivo em lotes. ENDLOCAL deve ser emitido para restaurar as
configurações anteriores. Quando o final de um script em lotes é alcançado,
um
ENDLOCAL é executado para qualquer comando SETLOCAL pendente emitido
por esse script em lotes.
SETLOCAL
Se as extensões de comando estiverem ativadas, o SETLOCAL será alterado como
a seguir:
O comando em lotes SETLOCAL agora aceita argumentos opcionais:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
ativa ou desativa extensões do processador de comandos.
Consulte CMD /? para obter detalhes.
ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
ativa ou desativa a expansão da variável de ambiente
atrasada. Consulte SET /? para obter detalhes.
Essas modificações duram até o comando ENDLOCAL correspondente,
independentemente da sua configuração anterior ao comando SETLOCAL.
O comando SETLOCAL definirá o valor ERRORLEVEL se um argumento for
fornecido. Ele será zero se um dos dois argumentos válidos for
fornecido; caso contrário, será um. É possível usar esses scripts
em lotes para determinar se as extensões estão disponíveis usando
a seguinte técnica:
VERIFY OTHER 2>nulo
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Não é possível ativar as extensões
Isso funciona porque nas versões mais antigas do CMD.EXE, SETLOCAL NÃOT
define o valor ERRORLEVEL. O comando VERIFY com um argumento incorreto
inicializa o valor ERRORLEVEL para um valor diferente de zero.
C:\WINDOWS>HELP SHIFT
Altera a posição dos parâmetros substituíveis em um arquivo em lotes.
SHIFT
[/n
]Se as extensões de comando estiverem ativadas, o comando SHIFT oferecerá
suporte à opção /n que informa ao comando para iniciar a alternância no
enésimo argumento, onde n pode estar entre zero e oito. Por exemplo:
SHIFT /2
alternaria de %3 para %2, de %4 para %3, etc. e deixaria %0 e %1
inalterados.