Est-il possible de définir la sortie d'une instruction d'un fichier batch en une variable, par exemple:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
J'utilise toujours USEBACKQ pour que, si vous avez une chaîne à insérer ou un nom de fichier long, vous puissiez utiliser vos guillemets sans foirer 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 ce truc 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 placer le contenu de ce fichier temporaire dans votre variable, comme par exemple:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Crédit au fil sur le matériel de Tom.
en une seule ligne:
FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)
la sortie de commande 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
Écrire un fichier
@echo %DataToWrite%>File.txt
remarque; avoir des espaces avant le caractère <> provoque l'ajout d'un espace à la fin de la variable, également
Pour ajouter à un fichier, comme un programme de journalisation, commencez par créer un fichier avec une seule touche d'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
etc
En tout cas quelques choses utiles
Ces réponses étaient si proches de la réponse dont j'avais besoin. Ceci est une tentative pour développer sur eux.
Si vous exécutez à partir d'un fichier .bat
et que vous voulez une seule ligne vous permettant d'exporter une commande compliquée telle que jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
vers une variable nommée AWS_ACCESS_KEY
, vous voulez ceci:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
Si vous êtes à l'invite C:\
, vous souhaitez une seule ligne vous permettant d'exécuter une commande compliquée telle que jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
vers une variable nommée AWS_ACCESS_KEY
alors vous souhaitez ceci:
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
La seule différence entre les deux réponses ci-dessus est que, sur la ligne de commande, vous utilisez un seul% dans votre variable. Dans un fichier batch, vous devez doubler les signes de pourcentage (%%).
Étant donné que la commande comprend des deux points, des guillemets et des parenthèses, vous devez inclure la ligne USEBACKQ
dans les options afin de pouvoir utiliser des guillemets arrières pour spécifier la commande à exécuter, puis toutes sortes de caractères amusants.
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