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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Batch file 批处理文件:设置来自第二个输出行的变量错误,输出上有空格;在这个时候是出人意料的”;_Batch File_Variables_Wmic_For Loop_Windows 7 - Fatal编程技术网

Batch file 批处理文件:设置来自第二个输出行的变量错误,输出上有空格;在这个时候是出人意料的”;

Batch file 批处理文件:设置来自第二个输出行的变量错误,输出上有空格;在这个时候是出人意料的”;,batch-file,variables,wmic,for-loop,windows-7,Batch File,Variables,Wmic,For Loop,Windows 7,我已经为此奋斗了两个小时了。我需要从命令的第二行输出设置一个变量。我在stackoverfglow找到了以下代码: for /f "skip=1delims=" %%a in ( '%SystemRoot%\System32\wbem\wmic.exe CSPRODUCT GET NAME' ) do set sid=%%a&goto next wmic.exe CSPRODUCT GET NAME的输出为: 名称 PowerEdge T610 但当我运行批处理文件时,我得到: >

我已经为此奋斗了两个小时了。我需要从命令的第二行输出设置一个变量。我在stackoverfglow找到了以下代码:

for /f "skip=1delims=" %%a in (
'%SystemRoot%\System32\wbem\wmic.exe CSPRODUCT GET NAME'
) do set sid=%%a&goto next
wmic.exe CSPRODUCT GET NAME的输出为:

名称
PowerEdge T610

但当我运行批处理文件时,我得到:

>set sid=PowerEdge T610
T610 was unexpected at this time.
我试着到处引用。 我编写这个脚本是为了检查这台计算机是否是VirtualBox o VMware机器,目的是用该命令的输出设置一个变量,然后将其与“VirtualBox”进行比较。但物理计算机的产品名称中有空格


谢谢

我将提供以下方法,因为它将捕获完整字符串,而不包含任何可能不需要的尾随空格字符:

@For/F Tokens^=6Delims^=^“%%G In(“%”“%\uuuuu AppDir\uuuuuuu%wbem\WMIC.exe”CSProduct Get Name/Format:“MOF”2>Nul“)Do@Set“SID=%%G”
注意:如果您使用的是
Windows 7
,则某些输出格式的使用可能会中断,因为相关的
.xsl
样式表位于特定于语言的子目录中,默认情况下不会读取该子目录。通过复制/移动或创建指向所有
.xsl
文件的链接,可以解决此问题,也就是说,在
wbem
目录中。(参见本答案底部的潜在替代修复)


或者,您可以完全省略,而不是定义变量,只使用条件语句:

@(“%\uuuuu-AppDir\uuuuu%wbem\WMIC.exe”CSProduct其中“名称类似于“%%VirtualBox%%”或名称类似于“%%VMWare%%”的列表实例/格式:“列表”2>NUL |“%\uuuuuu-AppDir\uuuuuu%find.exe”\uuuuuu“>NUL&(Echo-Virtual)| Echo-Physical)&暂停
注意:在此示例中,请确保在必要时替换
VirtualBox
和/或
VMWare
。显然,您可以在测试后使用所选的命令替换相应的
Echo
命令


或者,对于您需要它的实际过程,根据您的评论,以下内容也应足够:

@(“%\uuuuu AppDir\uuuuu%wbem\WMIC.exe”计算机系统,其中“类似于%%Virtual%%”的模型”获取/Value 2>NUL |“%\uuuuuu AppDir\uuuuu%find.exe”“=”>NUL&&(Echo Virtual)| Echo Physical)&Pause
这应该包括一台
Hyper-V
机器(型号:
Virtual machine
)、一台
VMware
机器(
Model:VMware Virtual Platform
)和一台
Oracle虚拟机(型号:
VirtualBox


下面是一个修改后的,旨在修复中潜在的
格式
问题,如我在上面的第一个示例中所述:

@Echo关闭
设置“XSL=MOF”
对于/F“Delims=”(“'Set SID 2>NUL')中的%%G,请设置“%%G=”
对于/F“EOL=MDelims=“%%G In(
““%%\uuuuuu AppDir\uuuuuu%wbem\WMIC.exe”操作系统获取MUILanguages,版本2>NUL”
)Do For/F代币^=2^,4-5Delims^=.^“^%%H In(“%%G”
)如果%%I eq 6 If%%J eq 1(调用:目标“%\uuuuu APPDIR\uuuuuu%wbem\%H\%XSL%”则执行此操作
)Else调用:目标“%XSL%”
设置SID 2>NUL&&Pause
后藤:EOF
:目标
对于/F令牌^=6Delims^=^“%%G In(
“%”“%\uuuuu AppDir\uuuu%wbem\WMIC.exe”CSProduct Get Name/格式:“%~1”2>Nul”
)不设置“SID=%%G”

9
是您放置代码的地方,它取代了我的代码,我的代码只是为了演示而添加的。

感谢您的超级快速回复。您的命令将把SID设置为“G”。这是批处理文件的输出:
B:\Projects\Done\Health\VirtualBox Tools Check>for/F Tokens=6Delims=“%G In('””C:\Windows\system32\wbem\WMIC.exe“CSProduct Get Name/Format:“MOF”2>Nul“')Do@Set“SID=G“B:\Projects\Done\Health\VirtualBox Tools Check>echo G
@deftoner-该命令应以
%%G
而不是
%G
结尾。我已修复了我的打字错误,对于给您带来的不便,我深表歉意。”。我还添加了另一种方法,它不需要在Windows 7中使用、定义变量或处理潜在的WMIC格式问题。我发现参数/格式:“MOF”不起作用。如果没有它,将可以完美地工作:
@For/F令牌^=6Delims^=^“%%G In('''''''''''''''''''''''''''%''''.'应用程序目录'.''wbem\WMIC.exe“CSProduct Get Name 2>Nul'.')Do@Set“SID=%%G”
(在多台计算机上测试)很抱歉,@deftoner,但我看不出该命令如何按照您的要求工作。我还添加了一个可能的未经测试的方法,用于解决
/Format
问题。请确保在运行您正在使用的行之前,使用
@Set“SID=“
取消任何现有变量值的定义,然后再对其进行测试。