我在Windows中运行一个命令(mycommand
),返回一个json文件,我执行以下操作
<mycommand> | findstr /r InstanceId >instance.txt
返回"InstanceId": "i-59df8e93",
作为输出。现在我想做的是我只想要那个始终在InstanceId:
之后和,
之前的部分。
如何在Windows命令提示符下执行此操作?
编辑1:我在这里取得了进展,
Instance1.txt的内容:
"InstanceId": "i-59df8e93"
我使用了以下命令:
FOR /F "tokens=1,2,3 delims=:" %G IN (instance1.txt) DO @echo %G %I> instance1.txt
返回 "InstanceId"
我希望这两个令牌处于不同的变量中。这样我就可以提取i-59df8e93
。怎么办?
答案 0 :(得分:3)
参考for /f
源文件:
"InstanceId": "i-59df8e93"
您需要使用"
作为分隔符并提取第3个令牌。
使用"
作为分隔符的最简单方法是使用以下“技巧”(Escaping double-quote in delims
option of for /F
的rkagerer参考答案):
^
(只要它不在文件中)作为分隔符delims
和tokens
现在,您可以使用以下命令提取i-59df8e93
:
for /f delims^=^"^ tokens^=3 %a in (instance.txt) do @echo %a
输出:
i-59df8e93
注意:我使用instance.txt
,因为此文件是原始命令的输出。
将此值添加到instance1.txt
:
for /f delims^=^"^ tokens^=3 %a in (instance.txt) do @echo %a > instance1.txt
将所有内容放在批处理文件中:
<mycommand> | findstr /r InstanceId >instance.txt
for /f delims^=^"^ tokens^=3 %%a in (instance.txt) do @%echo %%a > instance1.txt
注意:在批处理文件中,您需要将%
替换为%%
。