@echo off
setlocal EnableDelayedExpansion
echo { >>post.json
FOR /F "tokens=1,2 skip=1 delims==" %%a in (hardware.txt) do (
set temp=%%a
set res=%%b
call :Trim result !res!
call :Trim tem !temp!
for /f "delims=0123456789" %%i in ("!result!") do (
set var=%%i
echo !var!
if defined var (
echo "!tem!" : "!result!", >> post.json
) else (
echo "!tem!" : !result!, >> post.json
)
)
)
echo } >> post.json
:Trim
SetLocal EnableDelayedExpansion
set Params=%*
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b
exit /b
我做了一个 for 循环,它从名为 hardware.txt 的文件中读取,该文件具有以下格式的信息:
os = Microsoft Windows 10 Pro
osVersion = 10.0.19042
username = desktop-ujer9ka\arron
brand = ASUSTeK COMPUTER INC.
model = X556UR
ram = 12
storage = 934
macAddress = 00:FF:F7:29:ED:06
我得到以下格式的json:
{
"os" : "Microsoft Windows 10 Pro" ,
"osVersion" : "10.0.19042" ,
"username" : "desktop-ujer9ka\arron" ,
"brand" : "ASUSTeK COMPUTER INC." ,
"model" : "X556UR" ,
"macAddress" : "00:FF:F7:29:ED:06" ,
"processor" : "Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz" ,
}
在第二个 for 循环中,不执行 else 条件。如果还有其他简单的方法,请告诉我,或者如果有人可以帮助我,那就太好了。我需要第二个 for 循环,因为我想检查变量是否是数字,因为我需要 json 中的数字。我也不知道如何删除字符串后的最后一个逗号以制作正确的 json。
正如您所做
set var=%%
的那样,变量已定义 - 它只是空的。检查空变量:
有关更多信息,请参阅帖子 什么是测试批处理文件中的参数是否为空的正确方法?
我正在考虑:
您需要跳过 hardware.txt 文件的第一行,因为您的
For /F
循环命令正在使用skip=1
,因此For /L
循环从2
not开始1
,因此也“跳过”了文件的一行/变量。硬件文件中的大多数字符串都是由脚本获取的,我假设我像
wmic
命令一样使用并重定向到文件,因此,这就是在行尾添加额外空格的地方/细绳。我不明白(我英语有限),你需要在你想要/需要识别数字的地方做什么,任何额外的解释也可能会调整答案以满足你的需求。
即使我已经假设您的命令是通过使用获得的
wmic
,也不知道在第一行跳转什么内容或其来源,我正在添加另一个 bat,它获取类似于您的 hardware.txt 文件的信息,但是已经重定向.json 文件格式的输出项目4.绝对不能回答你问题的那部分如果有任何其他简单的方法请告诉我,原谅我,有些事情我更喜欢重新做以方便在未来的编辑/改编中处理
find "="
在第一个循环中使用时For /F
,我正在计算具有“=”的行,并考虑/使用与您的问题中发布的 hardware.txt 相等的文件,因此我建议您使用相同的行和相应的数量进行测试问题中发布的行,如果有差异,请告诉我...我想第6项中指出的用途可能会
skip=1
过时/无效,所以我在下面添加了一个完整的代码以及建议代码来获取字符串,而在行尾没有额外的空格......skip=1
inFor
循环:.json
获取格式的字符串,行尾没有多余的空格