Variables 将输入插入变量
为了好玩和学习,我正在编写一个批处理脚本 我设置了多个选项,例如Fint IP地址、MAC地址……等等。 问题是我无法找到如何将这两行的输出插入变量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名称是%
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