我很难保存以下命令的输出,这使我将操作系统的名称保存为变量。
$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
有人可以帮我这个忙吗? 我研究了其他方法,例如将输出写入临时文件,然后稍后再读回,但我想实现这一目标而不用使用临时文件
答案 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