É possível definir a saída de uma instrução de um arquivo em lotes para uma variável, por exemplo:
findstr testing > %VARIABLE%
echo %VARIABLE%
windows
batch-file
Dennis
fonte
fonte
Respostas:
Eu sempre uso o USEBACKQ para que, se você tiver uma string para inserir ou um nome de arquivo longo, possa usar aspas duplas sem estragar o comando.
Agora, se sua saída contiver várias linhas, você poderá fazer isso
fonte
ENABLEDELAYEDEXPANSION
|
, caso em que não funciona.^|
no lugar de|
, como descrito aquicommand
qualquer maneira, por favor? Tenho certeza de que está retornando um código diferente de zero, mas%ERRORLEVEL%
sempre contém 0, não importa onde eu tente usá-lo (mesmo dentro dodo
bloco). Então, acho que parte dessafor
construção está sobrescrevendo-a. BTW É inacreditável o quão louco é o código necessário para algo tão elementar.Eu encontrei este tópico nessa coisa da Interweb. Tudo se resume a:
Você também pode redirecionar a saída de um comando para um arquivo temporário e, em seguida, colocar o conteúdo desse arquivo temporário em sua variável, como segue. Porém, ele não funciona com entrada de várias linhas.
Crédito para o segmento no hardware de Tom.
fonte
em uma única linha:
a saída do comando será definida em% g e depois em VAR.
Mais informações: https://ss64.com/nt/for_cmd.html
fonte
Para ler um arquivo ...
Para escrever um arquivo
Nota; ter espaços antes do caractere <> faz com que um espaço seja adicionado no final da variável, também
Para adicionar a um arquivo, como um programa de logger, primeiro crie um arquivo com uma única tecla Enter, chamada e.txt
seu log ficará assim
e assim por diante
Enfim, algumas coisas úteis
fonte
Essas respostas foram todas tão próximas da resposta que eu precisava. Esta é uma tentativa de expandir neles.
Em um arquivo em lote
Se você estiver executando de dentro de um
.bat
arquivo e desejar uma única linha que permita exportar um comando complicado comojq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
uma variável chamada,AWS_ACCESS_KEY
então você deseja:Na linha de comando
Se você estiver
C:\
pronto, deseje uma única linha que permita executar um comando complicado, comojq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
uma variável chamada,AWS_ACCESS_KEY
então você deseja:Explicação
A única diferença entre as duas respostas acima é que, na linha de comando, você usa um único% na sua variável. Em um arquivo em lotes, é necessário dobrar os sinais de porcentagem (%%).
Como o comando inclui dois pontos, aspas e parênteses, você precisa incluir a
USEBACKQ
linha nas opções para poder usar aspas para especificar o comando a ser executado e, em seguida, todos os tipos de caracteres engraçados dentro dele.fonte
Se você não deseja gerar um arquivo temporário e depois ler uma variável, esse código armazena o resultado do comando diretamente em uma variável:
Se você deseja colocar a string de pesquisa entre aspas duplas:
Se você deseja armazenar esse código em um arquivo em lotes, adicione um símbolo% adicional:
Um exemplo útil para contar o número de arquivos em um diretório e armazenar em uma variável: (ilustra a tubulação)
Observe o uso de aspas simples em vez de aspas duplas "ou acento grave` nos suportes de comando. Este é alternativa mais limpa para
delims
,tokens
ouusebackq
emfor
loop.Testado em Win 10 CMD.
fonte
fonte
appcmd
não é um programa padrão e não consigo ver onde você atribui a saída do programa a uma variável. Por fim, você precisa de mais explicações.Eu testei assim e funcionou:
Ao canalizar o comando para uma variável, o prompt inserirá o resultado do comando "
Cmd
" na variável "Var
".Atualizar:
Não funciona, meu mal, o script que fiz foi o seguinte:
Na verdade, ele estava mostrando digamos "
test.txt
", mas na verdade estava mostrando o resultado dodir /b *.txt
comando " ", não oecho %var%
. Fiquei confuso, pois as duas saídas eram as mesmas.fonte
pipe the command into a variable prompt
, deveria ter escritodir /b *.txt | SET /P Var=
para obter a direção correta do tubo. PS: Também não funciona assim!Espero que esta ajuda
fonte