我想运行一个脚本,在该脚本中我可以获取公司中所有正在运行的计算机的Windows名称和系统版本,并将其放在文本文件中。 然后用我的Windows名称做一个系统变量。 我知道要运行什么,但遇到问题的地方是一个占位符。 所以这是我的代码:

    :OS_NAME
    Set OS_NAME= systeminfo | find "OS Name"

    :OS_Ver
    Set OS_Version= systeminfo | findstr /B /C:"OS Version"

    systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /c:"BIOS Version" |  >> G:\Directory\%Computername%

    :OS_Arch
    IF exist "%programfiles(x86)% (SET OS_ARCH=X64)
    Else (SET OS_ARCH=X86)

    :Win_7
    systeminfo | find "Microsoft Windows 7" > nul
        if %ERRORLEVEL% == 0 (
            goto ver_7)


    :Ver_7
    Set Win7= systeminfo | find "Microsoft Windows 7"
    Echo %computername% is running %WIN7% in %OS_ARCH% Environment >> G:\Directory\Win7Comps.txt

因此,基本上,我希望为Systeminfo的结果占位符,在制作系统变量时可以引用它并将其解析为SET命令。

谢谢,任何帮助将不胜感激。

===============>>#1 票数:4 已采纳

不能完全确定您要查找的内容,但是我看到的最大问题是systeminfo永远需要运行,并且返回的信息比您想要的要多得多。 您最好使用wmic捕获wmi查询。 这基本上是对示例脚本的重写,只是使用wmic而不是systeminfo 它应该快得多。

@echo off
setlocal
set prefix=G:\Directory

for /f "usebackq tokens=1,2 delims==|" %%I in (`wmic os get name^,version /format:list`) do 2>NUL set "%%I=%%J"
for /f "tokens=2 delims==" %%I in ('wmic bios get version /format:list') do set "bios=%%I"
for /f "tokens=2 delims==" %%I in ('wmic computersystem get model /format:list') do set "model=%%I"

>>"%prefix%\%COMPUTERNAME%" echo OS Name: %name%
>>"%prefix%\%COMPUTERNAME%" echo OS Version: %version%
>>"%prefix%\%COMPUTERNAME%" echo PC Model: %model%
>>"%prefix%\%COMPUTERNAME%" echo BIOS Version: %bios%

if defined PROGRAMFILES(x86) (set arch=X64) else set arch=X86

if "%name%" neq "%name:Windows 8=%" (
    set out=%prefix%\Win8Comps.txt
) else if "%name%" neq "%name:Windows 7=%" (
    set out=%prefix%\Win7Comps.txt
) else if "%name%" neq "%name:Windows Vista=%" (
    set out=%prefix%\WinVistaComps.txt
) else if "%name%" neq "%name:Windows XP=%" (
    set out=%prefix%\WinXPComps.txt
)

>>"%out%" echo %COMPUTERNAME% is running %name% in %arch% environment

输入wmic /? 有关更多信息,请尝试wmic computersystem get /? 或类似内容,以查看可以在每个课程下查询的项目列表。


wmic是Windows的瑞士军刀。 有趣的事实:您甚至可以使用wmic 生成远程系统上已安装软件的网页表。

===============>>#2 票数:1

您给批次多了点功劳。 如果您运行echo %OS_NAME% ,它将立即显示systeminfo | find "OS Name" systeminfo | find "OS Name" 批处理变量始终只会扩展,不会进一步处理。 当您尝试将变量设置为|时,也很有可能尝试运行find "OS Name" 不转义,也不用双引号引起来。

如果要将命令的输出设置为一个值,则必须在for语句中捕获它,如下所示:

for /f "tokens=2 delims=:" %%a in ('systeminfo ^| find "OS Name"') do set OS_Name=%%a

然后像这样删除前导空格:(可能有更好的方法可以这样做)

for /f "tokens=* delims= " %%a in ("%OS_Name%") do set OS_Name=%%a

这里要注意几件事。 1.) "tokens=2 delims=:"将定界符设置为 ,并且仅选择第二部分,这只会拉出您想要的部分。 2.) | ^进行转义,这需要在for循环中完成,否则将尝试作为单独的命令执行。 3.) "tokens=* delims= "这里的标记是*,它是所有标记。

我发现了其他一些问题。

systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /c:"BIOS Version" |  >> G:\Directory\%Computername%

这有一个额外的| 字符结尾。

IF exist "%programfiles(x86)% (SET OS_ARCH=X64)
Else (SET OS_ARCH=X86)

这里有两个问题,您没有在路径周围用双引号引起来, else必须与if语句的结尾括号放在同一行,如下所示:

IF exist "%programfiles(x86)% (SET OS_ARCH=X64
) Else (SET OS_ARCH=X86)

否则它会尝试处理else命令,因为它是自己的命令

  ask by Samster translate from so

未解决问题?本站智能推荐:

1回复

Windows 7日语操作系统

我正在使用Windows 7 64位英语版本,但在另一个系统中我也需要日语版本。 有没有所谓的日语操作系统? 使用日语操作系统或通过英语操作系统安装日语语言包以显示英文消息有什么区别? 英文和日文操作系统之间是否有性能差异?
1回复

通过Visual Studio中的安装项目定位Windows操作系统(x86和x64)

是否建议通过简单地在“设置和部署项目属性”中更改目标操作系统,将配置管理器设置为释放任何CPU,然后分发32位和64位产品? 还是最好使用(对于32位)x86版本,然后在安装项目属性中设置target-> x86,对于(64位)x64版本,然后在安装项目的属性中设置x64? 似乎有
3回复

静默更改操作系统语言(Windows 7)

我正在为SQL Server 2014 Express安装编写脚本(PowerShell)。 问题是:我必须静静地将OS语言(地区和语言)更改为fr_FR(来自法国的法语)。 当前语言为fr_CA(加拿大法语)。 我的问题是:我可以使用批处理文件或命令行从intl.cpl(区域和语言)
3回复

如何查看哪个操作系统?

如何在批处理文件中或在Windows 2k / 2k3环境中通过vbs检查OS版本? 您知道...类似的东西:“如果是Winver Win2k,则……或如果是Winver Win2k3,则……。
5回复

检测操作系统批处理

我需要一个可以显示正在运行的女巫Windows OS的批处理脚本,因为我正在编写程序,它的运行受到它正在运行的女巫OS的影响很大。 我需要测试的是: 有谁知道我该怎么做,因为我不知道从哪里开始?
1回复

检查操作系统版本和变量的网络标签

但是,我一直在成功使用此代码,希望在执行netsh命令重命名NIC时进行调整和使用-尽管在编写此代码时,我不确定这是否是最佳途径。 仅供参考:2012年以前的网络标签是“本地连接”,2012年是以太网。 我要执行以下命令 我正在考虑基于OSversion%NETWORKNA
6回复

如何使用C#获取运行代码的OS的名称?

我有一个C#应用程序,预计将在WIn 7和Win XP中运行。 在将MSI和EXE分发给客户之前,我需要在我的C#源代码中检查OS NAME。 在没有进入更精细的版本控制细节的情况下,我的代码想要检查它是32位WINDOWS XP还是64位WINDOWS 7。 我可以帮忙解决
3回复

登录历史和操作系统安装日期

实际上,我想在购买笔记本电脑之前先知道Windows操作系统的安装日期。 以及在我购买之前,卖方进行的登录的日期和时间。
3回复

批处理文件:检查操作系统是否为Windows 10

我想创建一个批处理文件,它将执行以下操作:检查正在运行的操作系统是否为Windows。 如果它应该打印Hello. Im win 10 Hello. Im win 10其他应该打印其他消息。 如果条件怎么办呢? 伪代码:
1回复

显示操作系统的时间和显示恢复选项的时间

我非常喜欢自动化事物,使自己的生活更轻松。 我已经尝试过在这个网站上四处搜寻,也只是搜寻了我的问题,但没有任何事情可以指出正确的方向。 所以这是我的问题。 我想要: 禁用(也称为取消选中)显示操作系统列表的时间。 将需要显示恢复选项的时间设置为3秒。 如果有可能在