Como definir comandos de saída como uma variável em um arquivo em lotes

É possível definir a saída de um arquivo em lote de uma instrução para uma variável, por exemplo:

findstr testing > %VARIABLE% echo %VARIABLE% 

 FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO ( SET var=%%F ) ECHO %var% 

Eu sempre uso o USEBACKQ para que, se você tiver uma string para inserir ou um nome de arquivo longo, possa usar suas aspas duplas sem estragar o comando.

Agora, se sua saída tiver várias linhas, você poderá fazer isso

 SETLOCAL ENABLEDELAYEDEXPANSION SET count=1 FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO ( SET var!count!=%%F SET /a count=!count!+1 ) ECHO %var1% ECHO %var2% ECHO %var3% ENDLOCAL 

Eu encontrei este segmento em que há coisa Interweb. Resume-se a:

 @echo off setlocal enableextensions for /f "tokens=*" %%a in ( 'VER' ) do ( set myvar=%%a ) echo/%%myvar%%=%myvar% pause endlocal 

Você também pode redirect 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, likesuchashereby:

 cmd > tmpFile set /p myvar= < tmpFile del tmpFile 

Crédito para o segmento no hardware do Tom.

em uma única linha:

 FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g) 

a saída do comando será definida em% g e depois em VAR.

Mais informações: https://ss64.com/nt/for_cmd.html

Para ler um arquivo …

 set /P Variable= 

Para escrever um arquivo

 @echo %DataToWrite%>File.txt 

Nota; ter espaços antes do caracter <> faz com que um espaço seja adicionado no final da variável, também

Para adicionar um arquivo, como um programa de registro, primeiro faça um arquivo com uma única chave de input nele chamado e.txt

 set /P Data=log0.txt 

seu log ficará assim

 Entry1 Entry2 

e assim por diante

De qualquer forma algumas coisas úteis

 cd %windir%\system32\inetsrv @echo off for /F "tokens=* USEBACKQ" %%x in ( `appcmd list apppool /text:name` ) do ( echo|set /p= "%%x - " /text:name & appcmd.exe list apppool "%%x" /text:processModel.identityType ) echo %date% & echo %time% pause 

Eu testei assim e funcionou:

 SET /P Var= | Cmd 

Ao canalizar o comando para uma variável, o prompt irá inserir o resultado do comando ” Cmd ” na variável ” Var “.

Atualizar:

Não funciona, meu mal, o roteiro que fiz foi isso:

 SET /P Var= | dir /b *.txt echo %Var% 

Ele estava realmente mostrando digamos ” test.txt “, mas na verdade estava mostrando o resultado do comando ” dir /b *.txt “, não o echo %var% . Fiquei confuso já que as duas saídas eram as mesmas.

Espero que esta ajuda

 set a=%username% echo %a% set a="hello" echo %a%