2014-12-03 36 views
2

密钥i在Windows中运行的命令(mycommand),它返回上一个JSON文件i执行以下操作提取特定字符串基于从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。如何进行 ?

回答

2

参考for /f

源文件:

"InstanceId": "i-59df8e93" 

您需要使用"作为分隔符,并提取令牌。

使用"作为分隔符的最简单WASY是通过使用下面的“特技”(参考答复Escaping double-quote in delims option of for /Frkagerer):

  1. 使用^(只要它不存在的文件中)的作为分隔符
  2. 互换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 

注意:在一个批处理文件,你需要用%%更换%