我正在制作一个有趣和学习的批处理脚本。
我已经设置了多个选择,例如Fint IP地址,MAC地址......等等。 问题是我无法找到如何将这两行的输出插入变量。
for /f "usebackq skip=1" %%f in (`wmic COMPUTERSYSTEM get name`) do ???
for /f "usebackq skip=1" %%f in (`wmic COMPUTERSYSTEM get domain`) do ???
所以我可以在像<; p>这样的句子中使用输出
您的DNS名称为%dns_name_output%,您的域名为%domain_name_output%。
答案 0 :(得分:2)
试试这个:
for /f %%f in ("%computername%") do set "name=%%f"
for /f %%f in ("%userdomain%") do set "domain=%%f"
echo %name% %domain%
答案 1 :(得分:2)
要捕获wmic
获取输出,请使用/value
这样的标记
for /f "tokens=2 delims==" %%A in ('wmic computersystem get name /value') do set "Name=%%A"
for /f "tokens=2 delims==" %%A in ('wmic computersystem get domain /value') do set "Domain=%%A"
答案 2 :(得分:2)
您看到的问题源于WMIC输出为unicode的事实。通过一些我不完全理解的机制(一个bug?),FOR / F命令将unicode命令输出转换为ASCII,但神秘地在每一行的末尾追加一个回车符(<CR>
)。 / p>
FOR / F不会返回空行,但神秘且看似空白的行并非空白 - 它们包含<CR>
。
即使正确忽略了额外的行,列表中的最后一个值也会包含在将值分配给环境变量时包含的不需要的<CR>
。如果稍后使用<CR>
正常扩展变量,%VAR%
将不会显而易见,因为命令解析器会自动删除所有<CR>
个字符。但<CR>
会被保留,如果使用延迟扩展!VAR!
会导致问题。
如果恰好是<CR>
,FOR / F命令会从每一行中删除最后一个字符。因此,通过额外的FOR / F传递值将消除问题。 David Ruhman建议使用/value
转换是一个很好的建议,可以改进。可以在一个循环中请求多个值,并且属性名称可以用作变量名称。每行只有一个名称/值对消除了值中空格和/或逗号的潜在解析问题。
在FOR / F中使用时,必须对WMIC命令中的逗号进行转义或引用。在这种情况下,引用整个命令似乎最简单。以下将正确定义两个环境变量 - Domain和Name:
for /f "delims=" %%A in ('"wmic computersystem get domain, name /value"') do (
for /f "tokens=1* delims==" %%B in ("%%A") do set "%%B=%%C"
)
echo Your host name is %name% and your domain is %domain%
答案 3 :(得分:1)
这使用wmic,没有任何奇怪的空格或CR嵌入。
@echo off
for /f "tokens=2 delims=<>" %%a in ('wmic COMPUTERSYSTEM get name /format:htable^|find "hidden"') do set "name=%%a"
for /f "tokens=2 delims=<>" %%a in ('wmic COMPUTERSYSTEM get domain /format:htable^|find "hidden"') do set "dom=%%a"
echo "%name%,%dom%"
pause
答案 4 :(得分:-1)
您可以定义一个变量,并使用反向标记附件将其值分配给命令的结果。
试试这个:
a=`ls`
echo $a