Windows 如何将命令输出设置为批处理文件中的变量
是否可以将批处理文件的语句输出设置为变量,例如:Windows 如何将命令输出设置为批处理文件中的变量,windows,batch-file,Windows,Batch File,是否可以将批处理文件的语句输出设置为变量,例如: findstr testing > %VARIABLE% echo %VARIABLE% 我在互联网上找到的。归结起来是: @echo off setlocal enableextensions for /f "tokens=*" %%a in ( 'VER' ) do ( set myvar=%%a ) echo/%%myvar%%=%myvar% pause endlocal 还可以将命令的输出重定向到临时文件
findstr testing > %VARIABLE%
echo %VARIABLE%
我在互联网上找到的。归结起来是:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
还可以将命令的输出重定向到临时文件,然后将该临时文件的内容放入变量中,如suchasherby。但它不适用于多行输入
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
cmd>tmpFile
设置/p myvar=
归功于Tom硬件上的线程。我在互联网上发现了这个东西。归结起来是:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
还可以将命令的输出重定向到临时文件,然后将该临时文件的内容放入变量中,如suchasherby。但它不适用于多行输入
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
cmd>tmpFile
设置/p myvar=
归功于汤姆硬件上的线程
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
我总是使用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
要读取文件
set /P Variable=<File.txt
注;在字符前面有空格也会导致在变量末尾添加空格
要添加到文件,如记录器程序,
首先创建一个文件,其中包含一个名为e.txt的enter键
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
等等
总之,读一个文件需要一些有用的东西
set /P Variable=<File.txt
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
注;在字符前面有空格也会导致在变量末尾添加空格
要添加到文件,如记录器程序,
首先创建一个文件,其中包含一个名为e.txt的enter键
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
等等
总之,在一行中有几个有用的东西:
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
FOR /F "tokens=*" %%g IN ('*your command*') do (SET VAR=%%g)
命令输出将在%g中设置,然后在VAR中设置
更多信息:在一行中:
FOR /F "tokens=*" %%g IN ('*your command*') do (SET VAR=%%g)
命令输出将在%g中设置,然后在VAR中设置
更多信息:这些答案都非常接近我需要的答案。这是对它们进行扩展的一种尝试 在批处理文件中 如果您在
.bat
文件中运行,并且需要一行代码,允许您将复杂的命令(如jq-r.Credentials.AccessKeyId“c:\temp\mfa getCreds.json
导出到名为AWS\u ACCESS\u KEY
的变量,那么您需要:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
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\u ACCESS\u KEY
的变量,那么您需要:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
解释
上面两个答案之间的唯一区别是,在命令行中,您在变量中使用了一个%。在批处理文件中,必须将百分号(%)加倍
由于该命令包含冒号、引号和括号,因此您需要在选项中包含
USEBACKQ
行,以便可以使用反引号指定要运行的命令,然后在其中指定各种有趣的字符。这些答案都非常接近我需要的答案。这是对它们进行扩展的一种尝试
在批处理文件中
如果您在.bat
文件中运行,并且需要一行代码,允许您将复杂的命令(如jq-r.Credentials.AccessKeyId“c:\temp\mfa getCreds.json
导出到名为AWS\u ACCESS\u KEY
的变量,那么您需要:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
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\u ACCESS\u KEY
的变量,那么您需要:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
解释
上面两个答案之间的唯一区别是,在命令行中,您在变量中使用了一个%。在批处理文件中,必须将百分号(%)加倍
由于该命令包含冒号、引号和括号,因此需要在选项中包含
USEBACKQ
行,以便可以使用反引号指定要运行的命令,然后在命令中指定各种有趣的字符。如果不想输出到临时文件,然后读入变量,此代码将命令的结果直接存储到变量中:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
@echo off
::::: ---- defining the assign macro ---- ::::::::
setlocal DisableDelayedExpansion
(set LF=^
%=EMPTY=%
)
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
::set argv=Empty
set assign=for /L %%n in (1 1 2) do ( %\n%
if %%n==2 (%\n%
setlocal enableDelayedExpansion%\n%
for /F "tokens=1,2 delims=," %%A in ("!argv!") do (%\n%
for /f "tokens=* delims=" %%# in ('%%~A') do endlocal^&set "%%~B=%%#" %\n%
) %\n%
) %\n%
) ^& set argv=,
::::: -------- ::::::::
:::EXAMPLE
%assign% "WHOAMI /LOGONID",result
echo %result%
如果要将搜索字符串括在双引号中:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
如果要将此代码存储在批处理文件中,请添加额外的%符号:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
计算目录中的文件数和存储在变量中的有用示例:
(图示管道)
请注意,在命令括号中使用单引号而不是双引号“或严重重音”。这是delims
、tokens
或usebackq
中for
循环的更干净的替代方法
在Win 10 CMD上测试。如果您不想输出到临时文件,然后读入变量,此代码将命令结果直接存储到变量中:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
@echo off
::::: ---- defining the assign macro ---- ::::::::
setlocal DisableDelayedExpansion
(set LF=^
%=EMPTY=%
)
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
::set argv=Empty
set assign=for /L %%n in (1 1 2) do ( %\n%
if %%n==2 (%\n%
setlocal enableDelayedExpansion%\n%
for /F "tokens=1,2 delims=," %%A in ("!argv!") do (%\n%
for /f "tokens=* delims=" %%# in ('%%~A') do endlocal^&set "%%~B=%%#" %\n%
) %\n%
) %\n%
) ^& set argv=,
::::: -------- ::::::::
:::EXAMPLE
%assign% "WHOAMI /LOGONID",result
echo %result%
如果要将搜索字符串括在双引号中:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
如果要将此代码存储在批处理文件中,请添加额外的%符号:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
计算目录中的文件数和存储在变量中的有用示例:
(图示管道)
请注意,在命令括号中使用单引号而不是双引号“或严重重音”。这是delims
、tokens
或usebackq
中for
循环的更干净的替代方案
在Win 10 CMD上测试。一些注释和一些技巧 将结果分配给变量的“官方”方法是使用,尽管在其他答案中也显示了如何使用临时文件 对于命令处理,根据