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%
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
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.
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
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
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
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.
Espérons que cette aide
set a=%username%
echo %a%
set a="hello"
echo %a%