Eu tenho um arquivo em lote que automatiza a cópia de um monte de arquivos de um lugar para outro e de volta para mim. A única coisa é que eu continuo selecionando acidentalmente aquele comando do meu buffer de comando e substituindo em massa as alterações não confirmadas.
Qual código eu preciso para meu arquivo .bat para dizer "tem certeza" e me fazer digitar "y" antes de executar o resto do arquivo? Se qualquer coisa exceto "y" for digitado, ele deve sair da execução nessa linha.
Editar 27 de novembro Ok, marquei de novo como sem resposta porque ainda não consigo descobrir. Quando eu chamo "sair;" ele fecha o cmd.exe, que não é o que desejo. Tudo isso porque o Windows implementou o buffer de comando errado [diferente do que estou acostumado, pelo menos]
fonte
SET AREYOUSURE=N
antes do prompt para limpar a escolha se você já executou o script antes na janela de comando. Sem ele, o padrão permanecerá a escolha selecionada anteriormente.setlocal
e oendlocal
devem cuidar disso.%AREYOUSURE%
não existirá mais após oendlocal
.tente o comando CHOICE , por exemplo
fonte
O
choice
comando não está disponível em todos os lugares. Com as versões mais recentes do Windows, oset
comando tem a/p
opção de obter a entrada do usuárioveja
set /?
para mais informaçõesfonte
Existem dois comandos disponíveis para prompts do usuário na linha de comando do Windows:
/P
disponível em todas as versões do Windows NT com extensões de comando habilitadas econjunto é um comando interno do processador de comandos do Windows
cmd.exe
. A opção/P
de solicitar uma string ao usuário está disponível apenas com extensões de comando habilitadas que são habilitadas por padrão, caso contrário quase nenhum arquivo em lote funcionaria mais hoje em dia.choice.exe é um aplicativo de console separado (comando externo) localizado em
%SystemRoot%\System32
.choice.exe
do Windows Server 2003 pode ser copiado para o diretório%SystemRoot%\System32
em uma máquina com Windows XP para uso no Windows XP como muitos outros comandos não disponíveis por padrão no Windows XP, mas disponíveis por padrão no Windows Server 2003.É uma prática recomendada favorecer o uso de CHOICE sobre o uso de SET / P pelos seguintes motivos:
/C
(e Ctrl+C) e emite um bipe de erro se o usuário pressionar uma tecla errada.echo Y | call PromptExample.bat
sobre o uso de ESCOLHA .cmd
causa de um erro de sintaxe, ou na execução de comandos não incluídos no arquivo em lote ou não bom arquivo em lote codificado. É necessário algum esforço para proteger o SET / P contra entrada do usuário intencionalmente errada ou por engano.Aqui está um exemplo aviso usando preferido CHOICE e, alternativamente SET / P em
choice.exe
não disponível no computador usado com o Windows.Nota: Este arquivo em lote usa extensões de comando que não estão disponíveis no Windows 95/98 / ME em
command.com
vez decmd.exe
como interpretador de comando.A linha de comando
set "UserChoice=!UserChoice: =!"
é adicionada para possibilitar a chamada desse arquivo em loteecho Y | call PromptExample.bat
no Windows NT4 / 2000 / XP e não requer o uso deecho Y| call PromptExample.bat
. Ele exclui todos os espaços da string lida de STDIN antes de executar as duas comparações de string.echo Y | call PromptExample.bat
resulta em YSPACE sendo atribuído à variável de ambienteUserChoice
. Isso resultaria no processamento do prompt duas vezes porque de"Y "
não faz distinção entre maiúsculas e minúsculas"N"
nem"Y"
sem excluir primeiro todos os espaços. Portanto,UserChoice
com YSPACE como valor resultaria na execução do prompt uma segunda vez com a opçãoN
definida como padrão no arquivo em lote na segunda execução do prompt, que em seguida resulta em uma saída inesperada do processamento do arquivo em lote. Sim, uso seguro de SET / P é realmente complicado, não é?Para obter ainda mais detalhes sobre o uso de SET / P e CHOICE para solicitar ao usuário uma escolha em uma lista de opções, consulte a resposta em Como impedir o interpretador de comandos do Windows de encerrar a execução do arquivo em lote com uma entrada incorreta do usuário?
Mais algumas dicas:
UserChoice
comN
eY
, mas o valor daUserChoice
cercado por"
com"N"
e"Y"
.EQU
eNEQ
são projetados primário para comparação de dois números inteiros no intervalo de -2147483648 a 2147483647 e não para comparar duas cadeias.EQU
eNEQ
funcionam também para comparações de strings, mas resultam na comparação de strings entre aspas duplas em uma tentativa inútil de converter a string esquerda em um inteiro.EQU
eNEQ
pode ser usado apenas com extensões de comando habilitadas. Os operadores de comparação para comparações de strings são==
enot ... ==
que funcionam mesmo com extensões de comando desabilitadas, já que ocommand.com
MS-DOS e o Windows 95/98 / ME já os suportam. Para obter mais detalhes sobre os operadores de comparação IF , consulte Símbolo equivalente a NEQ, LSS, GTR, etc. em arquivos em lote do Windows .goto :EOF
requer extensões de comando ativadas para realmente sair do processamento do arquivo em lote. Para obter mais detalhes, consulte Para onde GOTO: EOF retorna?Para entender os comandos usados e como eles funcionam, abra uma janela de prompt de comando, execute lá os seguintes comandos e leia todas as páginas de ajuda exibidas para cada comando com muito cuidado.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Veja também:
Ele explica o motivo do uso da sintaxe
set "variable=value"
na atribuição de uma string a uma variável de ambiente.if errorlevel X
comportamento e o operador&
.|
e o tratamento do STDIN .SystemRoot
.fonte
CHOICE.COM
por padrão no MS-DOS 6.0, MS-DOS 7.0, Windows 95 e Windows 98. Mas não havia nenhumchoice.exe
instalado por padrão no Windows NT4, Windows 2000 e Windows XP.CHOICE.COM
pode ser usado também no NT4, Windows 2000 e Windows XP, mas seria melhor usar 32 bitschoice.exe
do kit de recursos apropriado. Veja a página de Rob van der Woude sobre CHOICE . As opções são parcialmente diferentes entreCHOICE.COM
echoice.exe
. No entanto, a questão não é sobre o DOS.Aqui um pouco mais fácil:
ou
fonte
%errorlevel%
é sempre um valor inteiro. Veja aqui a documentação, incluindo um exemplo.Este é o meu método de referência para uma resposta sim / não .
Também não faz distinção entre maiúsculas e minúsculas.
Isso apenas verifica os erros fornecidos pela entrada e define a
choice
variável para o que você precisar para que possa ser usada abaixo no código.fonte
Se você quiser que o programa em lote saia de volta para o prompt e não feche o prompt (também conhecido como cmd.exe), você pode usar "exit / b".
Isso pode ajudar.
Ou se você não quiser usar tantas linhas ...
Espero que isto ajude...
fonte
Aqui está um exemplo simples que uso em um script de backup (.bat / batch) no Windows 10, que me permite ter diferentes opções ao fazer backups.
Você pode ter quantos blocos precisar.
fonte
Primeiro, abra o terminal.
Então, digite
A seguir, abra .sure e cole dentro.
Depois disso, feche o arquivo.
Isso lhe dará uma mensagem de tem certeza antes de continuar o comando.
fonte
Abra o terminal. Digite o seguinte
Cole isso dentro de sure.sh
Feche sure.sh e digite isso no terminal.
Agora, se você digitar sure antes de digitar o comando, será exibido um prompt de tem certeza antes de continuar o comando.
Espero que isso seja útil!
fonte