问题描述
|
是否可以将语句的批处理文件输出设置为变量,例如:
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%