如何在批处理文件中将命令输出设置为变量

问题描述

| 是否可以将语句的批处理文件输出设置为变量,例如:
findstr testing > %VARIABLE%

echo %VARIABLE%
    

解决方法

        
FOR /F \"tokens=* USEBACKQ\" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
我总是使用USEBACKQ,这样,如果您要插入一个字符串或一个长文件名,则可以使用双引号而不用弄乱命令。 现在,如果您的输出将包含多行,则可以执行此操作
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
    ,        我在Interweb那里发现了这个线程。归结为:
@echo off 
setlocal enableextensions 
for /f \"tokens=*\" %%a in ( 
\'VER\' 
) do ( 
set myvar=%%a 
) 
echo/%%myvar%%=%myvar% 
pause 
endlocal 
您还可以将命令的输出重定向到临时文件,然后将该临时文件的内容放入变量中,例如:
cmd > tmpFile 
set /p myvar= < tmpFile 
del tmpFile 
感谢Tom \'s Hardware上的线程。     ,        在一行中:
FOR /F \"tokens=*\" %g IN (\'*your command*\') do (SET VAR=%g)
命令输出将在%g中设置,然后在VAR中设置。 详细信息:https://ss64.com/nt/for_cmd.html     ,        要读取文件...
set /P Variable=<File.txt
写入文件
@echo %DataToWrite%>File.txt
注意;在<>字符之前有空格会导致在变量末尾添加空格, 要添加到文件(例如记录程序), 首先使用一个名为e.txt的回车键制作一个文件
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
您的日志将如下所示
Entry1
Entry2 
等等 无论如何,有一些有用的东西     ,        这些答案都非常接近我需要的答案。这是对它们进行扩展的尝试。 在批处理文件中 如果您是从
.bat
文件中运行的,并且希望使用一行来将诸如
jq -r \".Credentials.AccessKeyId\" c:\\temp\\mfa-getCreds.json
之类的复杂命令导出到名为
AWS_ACCESS_KEY
的变量,那么您需要这样做:
FOR /F \"tokens=* USEBACKQ\" %%g IN (`jq -r \".Credentials.AccessKeyId\" c:\\temp\\mfa-getCreds.json`) do (SET \"AWS_ACCESS_KEY=%%g\")
在命令行上 如果在
C:\\
提示符下,您需要单行允许您将名为
jq -r \".Credentials.AccessKeyId\" c:\\temp\\mfa-getCreds.json
的复杂命令运行到名为
AWS_ACCESS_KEY
的变量,那么您需要这样做:
FOR /F \"tokens=* USEBACKQ\" %g IN (`jq -r \".Credentials.AccessKeyId\" c:\\temp\\mfa-getCreds.json`) do (SET \"AWS_ACCESS_KEY=%g\")
说明 上面两个答案之间的唯一区别是,在命令行上,您在变量中使用了一个%。在批处理文件中,您必须加倍百分号(%%)。 由于该命令包含冒号,引号和括号,因此您需要在选项中包括“ 18”行,以便可以使用反引号指定要运行的命令,然后在其中使用各种有趣的字符。     ,        如果您不想输出到临时文件然后读入变量,则此代码将命令结果直接存储到变量中:
FOR /F %i IN (\'findstr testing\') DO set VARIABLE=%i
echo %VARIABLE%
如果要将搜索字符串用双引号引起来:
FOR /F %i IN (\'findstr \"testing\"\') DO set VARIABLE=%i
如果要将此代码存储在批处理文件中,请添加一个额外的%符号:
FOR /F %%i IN (\'findstr \"testing\"\') DO set VARIABLE=%%i
一个有用的示例,用于计算目录中的文件数并存储在变量中: (说明管道)
FOR /F %i IN (\'dir /b /a-d \"%cd%\" ^| find /v /c \"?\"\') DO set /a count=%i
请注意在命令括号中使用单引号而不是双引号\“或重音符号`。这是在
for
循环中替代
delims
tokens
usebackq
的更干净的替代方法。 在Win 10 CMD上测试。     ,        
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
    ,        我已经像这样测试过,并且有效:
SET /P Var= | Cmd
通过将命令管道传递到变量中,提示符将命令\“
Cmd
\”的结果插入变量\“
Var
\”中。 更新: 它行不通,不好,我做的脚本是这样的:
SET /P Var= | dir /b *.txt
echo %Var%
实际上显示的是\“
test.txt
\”,但是实际上显示的是\“
dir /b *.txt
\”命令的结果,而不是showing34ѭ。由于两个输出相同,我感到困惑。     ,        希望有帮助
set a=%username%
echo %a%    
set a=\"hello\"
echo %a%