Comment définir la sortie des commandes comme une variable dans un fichier batch

est-il possible de définir la sortie d'une déclaration d'un fichier de lot à une variable, par exemple:

findstr testing > %VARIABLE%

echo %VARIABLE%
126
demandé sur g t 2011-06-15 19:00:21

7 réponses

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

j'utilise toujours USEBACKQ de sorte que si vous avez une chaîne à insérer ou un nom de fichier long, vous pouvez utiliser vos guillemets doubles sans gâcher la commande.

maintenant si votre sortie contient plusieurs lignes, vous pouvez le faire

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
184
répondu Mechaflash 2011-12-15 16:30:36

j'ai trouvé ce fil sur cette chose Interweb. Se résume à:

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

vous pouvez également rediriger la sortie d'une commande vers un fichier temporaire, puis mettre le contenu de ce fichier temporaire dans votre variable, comme suchashereby:

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

Crédit pour le fil sur tom's Hardware.

41
répondu dolphy 2011-06-15 15:07:36

en une seule ligne:

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

la commande output sera définie dans %g puis dans VAR.

plus d'informations: https://ss64.com/nt/for_cmd.html

16
répondu Yuri 2018-01-23 15:06:10

Pour lire un fichier...

set /P Variable=<File.txt

pour écrire un fichier

@echo %DataToWrite%>File.txt

note; avoir des espaces avant le caractère <> fait qu'un espace est ajouté à la fin de la variable, aussi

pour ajouter à un fichier, comme un programme logger, D'abord faire un fichier avec une seule touche entrée appelé e.txt

set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt

votre journal ressemblera à ceci

Entry1
Entry2 

et ainsi de suite

de toute façon un couple de choses utiles

14
répondu MaxMinecraft101e 2015-07-08 03:44:24
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
1
répondu Dacke 2017-08-03 21:11:09

Je l'ai testé comme ceci et il a fonctionné:

SET /P Var= | Cmd

en insérant la commande dans une variable, l'invite insérera le résultat de la commande " Cmd " dans la variable " Var ".

mise à jour:

Ça ne fonctionne pas, mon mauvais, le script que j'ai fait était ceci:

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

elle montrait effectivement disons test.txt , mais elle montrait en fait le résultat de la commande" dir /b *.txt ", pas de la commande echo %var% . Je me suis embrouillé car les deux sorties étaient identiques.

-3
répondu QcAlexN 2018-05-22 18:54:39

Espérons que cette aide

set a=%username%
echo %a%    
set a="hello"
echo %a%
-12
répondu Ben2014 2015-09-17 07:33:21