Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 将输入插入变量_Variables_Batch File_Output - Fatal编程技术网

Variables 将输入插入变量

Variables 将输入插入变量,variables,batch-file,output,Variables,Batch File,Output,为了好玩和学习,我正在编写一个批处理脚本 我设置了多个选项,例如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名称是%

为了好玩和学习,我正在编写一个批处理脚本

我设置了多个选项,例如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\u name\u output%,您的域是%domain\u name\u output%。

您可以定义一个变量,并使用返回标记将其值分配给命令的结果

试试这个:

a=`ls`
echo $a

您可以定义一个变量,并使用back tick将其值指定给命令的结果

试试这个:

a=`ls`
echo $a
试试这个:

for /f %%f in ("%computername%") do set "name=%%f"
for /f %%f in ("%userdomain%") do set "domain=%%f"
echo %name%  %domain%
试试这个:

for /f %%f in ("%computername%") do set "name=%%f"
for /f %%f in ("%userdomain%") do set "domain=%%f"
echo %name%  %domain%

要捕获
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"

要捕获
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"

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

FOR/F不会返回空行,但神秘的、看似空行的行并不是真正的空行-它们包含一个

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

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

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

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%

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

FOR/F不会返回空行,但神秘的、看似空行的行并不是真正的空行-它们包含一个

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

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

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

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%

这可以在不嵌入任何奇数空格或CRs的情况下使用wmic

@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
@echo关闭
对于/f“tokens=2 delims=“%%a in('wmic COMPUTERSYSTEM get name/format:htable^ | find“hidden”'),请设置“name=%%a”
对于/f“tokens=2 delims=“%%a in('wmic COMPUTERSYSTEM get domain/format:htable^ | find“hidden”'),请设置“dom=%%a”
回显“%name%,%dom%”
暂停

这使用wmic工作,不嵌入任何奇数空格或CRs

@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
@echo关闭
对于/f“tokens=2 delims=“%%a in('wmic COMPUTERSYSTEM get name/format:htable^ | find“hidden”'),请设置“name=%%a”
对于/f“tokens=2 delims=“%%a in('wmic COMPUTERSYSTEM get domain/format:htable^ | find“hidden”'),请设置“dom=%%a”
回显“%name%,%dom%”
暂停

问题不在于将输出放入变量中,问题在于
wmic
无法按预期工作。它在行尾有一些额外的
CR
,不知道具体是多少(1-3?),我知道,是3行。一上一下。但我现在通过避免使用wmic解决了这个问题。问题不是将输出放在变量中,问题是
wmic
不能按预期工作。它在行尾有一些额外的
CR
,不知道具体是多少(1-3?),我知道,是3行。一上一下。但我现在解决了这个问题,避免了wmic。谢谢,它对变量更有效。但我必须使用%userdomain%而不是%logonserver%。然后它工作得很好:)如果引用标准变量,为什么要使用FOR/F呢?直接使用标准变量,或者直接将值分配给新变量。@dbenham这只是为了向用户显示变量的赋值。否则你是对的,当然,这是没有意义的。谢谢,它对变量更有效。但我必须使用%userdomain%而不是%logonserver%。Th