我有一个bat文件,其中包含以下代码。它很好地将内容写入到文本文件中,无论我如何扩展这个脚本,我都需要为findstr结果设置变量。
我已经尝试了以下选项,但没有成功
到目前为止,我是这样尝试的:
`
systeminfo | set hostnme = findstr /c:"Host Name">>string.txt
systeminfo | findstr set dimain = /c:"Domain">>string.txt
set osnme = systeminfo | findstr /c:"OS Name">>string.txt
`我知道我可能遗漏了一些非常简单的东西,但通过一些谷歌搜索和一些背景,我有批处理文件,我很难找到它。
这是我的全部代码。
`
@echo on
echo Checking your system infor, Please wating...
systeminfo | findstr /c:"Host Name">>string.txt
systeminfo | findstr /c:"Domain">>string.txt
systeminfo | findstr /c:"OS Name">>string.txt
systeminfo | findstr /c:"OS Version">>string.txt
systeminfo | findstr /c:"System Manufacturer">>string.txt
systeminfo | findstr /c:"System Model">>string.txt
systeminfo | findstr /c:"System type">>string.txt
systeminfo | findstr /c:"Total Physical Memory">>string.txt
ipconfig | findstr IPv4>>string.txt
echo %hoo%
echo.
echo Hard Drive Space:
wmic diskdrive get size>>string.txt
echo.
echo.
echo Service Tag:
wmic bios get serialnumber>>string.txt
echo.
echo.
echo CPU:
wmic cpu get name>>string.txt
echo Completed! Thank you!
echo %ComputerName%
rename "string.txt" "%ComputerName%.txt"
echo Rename Completed!
start "" http://www.localhost.com?txt=%ComputerName%
pause
`我希望我们把以下项目的每个结果作为变量,这样我就可以在代码中的其他地方使用它们
systeminfo | findstr /c:"Host Name">>string.txt
systeminfo | findstr /c:"Domain">>string.txt
systeminfo | findstr /c:"OS Name">>string.txt
systeminfo | findstr /c:"OS Version">>string.txt
systeminfo | findstr /c:"System Manufacturer">>string.txt
systeminfo | findstr /c:"System Model">>string.txt
systeminfo | findstr /c:"System type">>string.txt
systeminfo | findstr /c:"Total Physical Memory">>string.txt
ipconfig | findstr IPv4>>string.txt发布于 2019-07-20 01:21:39
@ECHO OFF
SETLOCAL
FOR /f "tokens=1*delims=:" %%a IN ('systeminfo 2^>nul') DO (
FOR /f "tokens=*" %%r IN ("%%b") DO (
IF /i "%%a"=="System Manufacturer" SET "#sys_man=%%r"
IF /i "%%a"=="Host Name" SET "#hostname=%%r"
IF /i "%%a"=="OS Version" SET "#osversion=%%r"
)
)
ECHO ------------------- results
SET #
GOTO :eof2^>nul处理进度消息。2>nul正在将标准错误重定向到nul,插入符号告诉cmd >是要执行的命令的一部分,而不是for的一部分。
"tokens=1*在delims字符上拆分每一行,因此冒号之前的部分被分配给%%a,而行的其余部分被分配给%%b。
内部for使用tokens=*来处理%%b中的前导空格(空格包含在默认分隔符集中)
然后检测每个必需的字符串,并将其赋给一个变量。我简单地给我在#中使用的每个变量加上了前缀,这样我就可以使用set #来显示所有的变量,并且系统不会分配以#开头的变量。
发布于 2019-07-20 12:32:36
您尚未指定string.txt文件的内容。您已请求将findstr命令的结果存储在变量中。
获取任何命令的输出并将其赋值给变量的标准方法如下:
for /F "delims=" %%a in ('anyCommand with parameters') do set "variable=%%a"例如,在您的示例中:
for /F "tokens=2 delims=:" %%a in ('systeminfo ^| findstr /C:"Host Name"') do (
for /F "tokens=*" %%b in ("%%a") do set "hostname=%%b"
)第一个for /F命令获取冒号之后的输出行部分。第二个for /F消除了该部分中的前导空格,set命令将结果赋给hostname变量。
代码中的一个不便之处是,systeminfo是一个昂贵的命令,需要很长时间才能完成,所以使用它只提取一行,然后对下一行重复此命令是浪费资源……一种更好的方法是只运行systeminfo一次,然后从中提取所有需要的行。
一种更好的方法不是为了单独定义一系列if命令中的每一行/变量而对每一行/变量进行测试,而是为所有行定义变量。为此,您可以根据每行冒号之前的描述创建变量的名称。
@echo off
setlocal EnableDelayedExpansion
echo Please wait . . .
for /F "tokens=1* delims=:" %%a in ('systeminfo 2^>nul') do (
set "varName=%%a"
if "!varName:~0,1!" neq " " (
for /F "tokens=*" %%c in ("%%b") do set "#!varName: =_!=%%c"
)
)
set #https://stackoverflow.com/questions/57116445
复制相似问题