1

我正在编写一个批处理脚本来娱乐和学习。

我已经设置了多个选择,例如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 ???

所以我可以在一个句子中使用输出;

您的 DNS 名称是 %dns_name_output%,您的域是 %domain_name_output%。

4

5 回答 5

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"
于 2013-07-09T18:49:03.653 回答
2

尝试这个:

for /f %%f in ("%computername%") do set "name=%%f"
for /f %%f in ("%userdomain%") do set "domain=%%f"
echo %name%  %domain%
于 2013-07-09T17:15:57.627 回答
2

您看到的问题源于 WMIC 输出为 unicode 的事实。<CR>通过某种我不完全理解的机制(错误?), FOR /F 命令将 unicode 命令输出转换为 ASCII,但在每行的末尾神秘地附加了一个额外的回车符 ( )。

FOR /F 不返回空行,但神秘且看似空白的行并不是真正的空白 - 它们包含一个<CR>.

即使额外的行被正确忽略,列表中的最后一个值也会包含一个不需要<CR>的值,在将值分配给环境变量时会包含该值。如果稍后使用正常扩展变量,<CR>则不会明显,%VAR%因为命令解析器会自动去除所有<CR>字符。但是<CR>如果使用延迟扩展,它会被保留并且可能会导致问题!VAR!

FOR /F 命令从每行中删除最后一个字符,如果它恰好是<CR>. 因此,通过额外的 FOR /F 传递值将消除问题。David Ruhman 的使用/valueswitch 的建议是一个很好的建议,并且可以改进。一个循环可以请求多个值,属性名可以作为变量名。每行只有一个名称/值对消除了值中空格和/或逗号的潜在解析问题。

WMIC 命令中的逗号在 FOR /F 中使用时必须转义或引用。在这种情况下,引用整个命令似乎是最简单的。以下将正确定义两个环境变量 - 域和名称:

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%
于 2013-07-09T21:01:43.257 回答
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
于 2013-07-10T01:14:23.877 回答
-1

您可以定义一个变量,并使用反引号将其值分配给命令的结果。

尝试这个:

a=`ls`
echo $a
于 2013-07-09T17:15:11.790 回答