是否可以将批处理文件的语句输出设置为一个变量,例如:

findstr testing > %VARIABLE%

echo %VARIABLE%

当前回答

在一行中:

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

命令输出将在%g中设置,然后在VAR中设置。

更多信息请访问:https://ss64.com/nt/for_cmd.html

其他回答

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 Variable=<File.txt

写文件

@echo %DataToWrite%>File.txt

请注意;<>字符前有空格也会导致在变量末尾添加空格

要添加到文件中,就像日志程序一样, 首先创建一个文件,其中只有一个enter键,名为e.txt

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

你的日志是这样的

Entry1
Entry2 

等等

总之,有一些有用的东西

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

这些答案都非常接近我需要的答案。这是一种扩展它们的尝试。

在批处理文件中

如果您在.bat文件中运行,并且需要一行允许您导出像jq -r ". credentials这样复杂的命令。c: \ temp \ mfa-getCreds AccessKeyId”。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这样复杂的命令。c: \ temp \ mfa-getCreds AccessKeyId”。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")

解释

上面两个答案之间的唯一区别是,在命令行中,您在变量中使用了单个%。在批处理文件中,必须将百分比符号加倍(%%)。

由于该命令包括冒号、引号和圆括号,因此需要在选项中包括USEBACKQ行,以便使用反引号指定要运行的命令,然后在其中使用各种有趣的字符。

在大多数情况下,创建一个以变量名命名的临时文件可能是可以接受的。(因为你可能正在使用有意义的变量name…)

这里,我的变量名是SSH_PAGEANT_AUTH_SOCK

dir /w "\\.\pipe\\"|find "pageant" > %temp%\SSH_PAGEANT_AUTH_SOCK && set /P SSH_PAGEANT_AUTH_SOCK=<%temp%\SSH_PAGEANT_AUTH_SOCK