批处理脚本-将systeminfo命令的输出保存到变量

时间:2018-07-17 05:29:02

标签: windows batch-file

我很难保存以下命令的输出,这使我将操作系统的名称保存为变量。

$res =  $this->db->get_where('languages',array('l_id'=>$data['id']))- 
>result_array();    
rename(APPPATH.'/language/'.$result[0]['l_eng'], $data['l_eng']);

我尝试使用如下所示的for循环,但是变量的值为systeminfo | findstr /B /C:"OS Name"

OS

有人可以帮我这个忙吗? 我研究了其他方法,例如将输出写入临时文件,然后稍后再读回,但我想实现这一目标而不用使用临时文件

2 个答案:

答案 0 :(得分:0)

@echo off
setlocal

set "vard="

for /f "tokens=1,2,* delims=: " %%i in ('systeminfo') do (
    if "%%~i %%~j" == "OS Name" (
        call :clean_spaces "%%~k"
        goto :next
    )
)

:next
echo the operating system name 2 is "%vard%"
exit /b

:clean_spaces
setlocal enabledelayedexpansion
set "string=%~1"
    :loop
    if "!string:~-1!" == " " (
        set "string=!string:~,-1!"
        goto :loop
    )
endlocal & set "vard=%string%"

用冒号和空格分隔。不幸的是,令牌*也 获取systeminfo输出的尾随空格。

名为:trim_spaces的标签会修饰尾随空格 vard存储的值。它是通过 检查最后一个字符(如果有空格)并将其删除。 它一直循环,直到没有尾随空格为止。

答案 1 :(得分:0)

要使用已发布代码中使用的慢速SystemInfo方法,应使用已知的分隔符:分隔输出。

@Echo Off
For /F "Tokens=1* Delims=:" %%A In ('SystemInfo^|Find /I "OS Name"'
) Do Call :Sub %%B
Echo the operating system name 2 is %vard%
Pause
GoTo :EOF

:Sub
Set "vard=%*"
Exit /B

或者,您可以使用内置的WMI命令行WMIC.exe

@Echo Off
For /F "Skip=1 Delims=|" %%A In ('WMIC OS Get Name'
) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%A
Echo the operating system name 2 is %vard%
Pause
GoTo :EOF

:Sub
Set "vard=%*"
Exit /B

或使用Reg.exe从注册表中检索信息:

@Echo Off
For /F "Skip=2 Tokens=2*" %%A In (
    'Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductName'
) Do Set "vard=%%B" 
Echo the operating system name 2 is %vard%
Pause
GoTo :EOF