{"id":63743,"date":"2007-10-23T23:23:00","date_gmt":"2007-10-23T23:23:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2007\/10\/23\/hey-scripting-guy-how-can-i-extract-all-the-text-between-two-tags-in-a-text-file\/"},"modified":"2007-10-23T23:23:00","modified_gmt":"2007-10-23T23:23:00","slug":"hey-scripting-guy-how-can-i-extract-all-the-text-between-two-tags-in-a-text-file","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/hey-scripting-guy-how-can-i-extract-all-the-text-between-two-tags-in-a-text-file\/","title":{"rendered":"Hey, Scripting Guy! How Can I Extract All the Text Between Two Tags in a Text File?"},"content":{"rendered":"<p><H2><IMG class=\"nearGraphic\" title=\"Hey, Scripting Guy! Question\" border=\"0\" alt=\"Hey, Scripting Guy! Question\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" width=\"34\" height=\"34\"> <\/H2>\n<P>Hey, Scripting Guy! I have a whole bunch of text files in a folder. I need to open each of these files, extract everything between the <B>&lt;filecount&gt;<\/B> and <B>&lt;\/filecount&gt;<\/B> tags, and then write that information to a separate file. How can I do that?<BR><BR>&#8212; RP<\/P><IMG border=\"0\" alt=\"Spacer\" src=\"https:\/\/devblogs.microsoft.com\/scripting\/wp-content\/uploads\/sites\/29\/2019\/05\/spacer.gif\" width=\"5\" height=\"5\"><IMG class=\"nearGraphic\" title=\"Hey, Scripting Guy! Answer\" border=\"0\" alt=\"Hey, Scripting Guy! Answer\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" width=\"34\" height=\"34\"><A href=\"http:\/\/go.microsoft.com\/fwlink\/?linkid=68779&amp;clcid=0x409\"><IMG class=\"farGraphic\" title=\"Script Center\" border=\"0\" alt=\"Script Center\" align=\"right\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/ad.jpg\" width=\"120\" height=\"288\"><\/A> \n<P>Hey, RP. You know, the other day the Scripting Guy who writes this column and the Scripting Son were discussing the upcoming Scripting Guys\u2019 trip to Barcelona for <A href=\"http:\/\/www.mseventseurope.com\/teched\/07\/itforum\/Content\/Pages\/Default.aspx\" target=\"_blank\"><B>TechEd IT Forum 2007<\/B><\/A>. \u201cI still don\u2019t get it,\u201d said the Scripting Son. \u201cWhy would anyone want to talk to <I>you<\/I>?\u201d<\/P>\n<P>\u201cWell,\u201d said the Scripting Dad. \u201cI guess I\u2019m kind of famous.\u201d<\/P>\n<P>\u201cNo you\u2019re not,\u201d said the Scripting Son. \u201cIf you were famous, you\u2019d be in <A href=\"http:\/\/wikipedia.org\/\" target=\"_blank\"><B>Wikipedia<\/B><\/A>.\u201d<\/P>\n<P>And you know what? The Scripting Son was right: if the Scripting Guys were famous they <I>would<\/I> be in Wikipedia. And yet they aren\u2019t. So does that mean that maybe the Scripting Guys aren\u2019t anywhere near as famous and important as they <I>think<\/I> they are?<\/P>\n<P>No, of course not; that just means the Scripting Guys, being the modest and unassuming types, haven\u2019t revealed enough about their lives to enable someone to write a Wikipedia entry. Admittedly, we <I>could<\/I> go write such an entry ourselves; however, that doesn\u2019t seem very sporting. Therefore, if anyone out there is interested in creating a Wikipedia entry for the Scripting Guys, well, here are some choice anecdotes to get you started:<\/P>\n<TABLE border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n<TBODY>\n<TR>\n<TD class=\"listBullet\" vAlign=\"top\">\u2022<\/TD>\n<TD class=\"listItem\">\n<P>In 1949, Scripting Guy Jean Ross was third runner-up in the Miss Iowa beauty pageant. However, she was forced to abdicate her title several months later due to her role in the great Dairy Farm Scandal of 1950.<\/P><\/TD><\/TR>\n<TR>\n<TD class=\"listBullet\" vAlign=\"top\">\u2022<\/TD>\n<TD class=\"listItem\">\n<P>In February of 1606, Galileo Galilei mentioned to his young apprentice, Scripting Guy Peter Costantini, that he could \u201creally use a script that would help him monitor the processes on running on a computer.\u201d That very day Peter wrote his first column on how to monitor the processes running on a computer. Today, the Script Center boasts not only <A href=\"http:\/\/www.microsoft.com\/technet\/scriptcenter\/resources\/scriptshop\/shop0505.mspx\"><B>that first column<\/B><\/A>, but also the 347,286 follow-up columns that Peter has composed on the same subject.<\/P><\/TD><\/TR>\n<TR>\n<TD class=\"listBullet\" vAlign=\"top\">\u2022<\/TD>\n<TD class=\"listItem\">\n<P>In August, 2005 Scripting Guy Dean Tsaltas made himself a sandwich. \u201cIt was pretty good,\u201d Dean recalled. \u201cNot as good as you get at Subway or Quiznos. But still pretty good.\u201d<\/P><\/TD><\/TR>\n<TR>\n<TD class=\"listBullet\" vAlign=\"top\">\u2022<\/TD>\n<TD class=\"listItem\">\n<P>In October, 2007 Scripting Guy Greg Stemp was told, \u201cIf you were famous, you\u2019d be in Wikipedia.\u201d<\/P><\/TD><\/TR><\/TBODY><\/TABLE>\n<P>We assume that should be more than enough information to get a Scripting Guys entry accepted by Wikipedia\u2019s editorial board. If it\u2019s not, however, well, just wait until the folks at Wikipedia get a whiff of <I>this<\/I>: a script that can extract the information found between two tags in a text file. Let\u2019s show you the code for performing this feat on a single file, then we\u2019ll show you a fancier script, one that can extract this information for each file in a folder.<\/P>\n<P>Here\u2019s the basic script:<\/P><PRE class=\"codeSample\">Const ForReading = 1<\/p>\n<p>Set objFSO = CreateObject(&#8220;Scripting.FileSystemObject&#8221;)\nSet objFile = objFSO.OpenTextFile(&#8220;C:\\Scripts\\Test.txt&#8221;, ForReading)<\/p>\n<p>strContents = objFile.ReadAll\nobjFile.Close<\/p>\n<p>strStartText = &#8220;&lt;filecount&gt;&#8221;\nstrEndText = &#8220;&lt;\/filecount&gt;&#8221;<\/p>\n<p>intStart = InStr(strContents, strStartText)\nintStart = intStart + Len(strStartText)<\/p>\n<p>intEnd = InStr(strContents, strEndText)<\/p>\n<p>intCharacters = intEnd &#8211; intStart<\/p>\n<p>strText = Mid(strContents, intStart, intCharacters)<\/p>\n<p>Wscript.Echo strText\n<\/PRE>\n<P>Actually we agree: this <I>does<\/I> sort of look like gibberish, doesn\u2019t it? But don\u2019t worry: we promise to de-gibberish this before we call it a day.<\/P>\n<TABLE id=\"E5E\" class=\"dataTable\" cellSpacing=\"0\" cellPadding=\"0\">\n<THEAD><\/THEAD>\n<TBODY>\n<TR class=\"record\" vAlign=\"top\">\n<TD>\n<P><B>Note<\/B>. Yes, \u201cde-gibberish\u201d is a technical term, a technical term that only someone truly famous \u2013 and deserving of recognition in an online encyclopedia \u2013 would be able to use.<\/P>\n<P>And use correctly.<\/P><\/TD><\/TR><\/TBODY><\/TABLE>\n<DIV class=\"dataTableBottomMargin\"><\/DIV>\n<P>To begin with, we define a constant named ForReading and set the value to 1; we\u2019ll use this constant when we go to open our text file. We next create an instance of the <B>Scripting.FileSystemObject<\/B>, then use the <B>OpenTextFile<\/B> method to open the file C:\\Scripts\\Test.txt for reading:<\/P><PRE class=\"codeSample\">Set objFSO = CreateObject(&#8220;Scripting.FileSystemObject&#8221;)\nSet objFile = objFSO.OpenTextFile(&#8220;C:\\Scripts\\Test.txt&#8221;, ForReading)\n<\/PRE>\n<P>So what are we going to do with this file now that it\u2019s open? Well, to tell you the truth, not much: we\u2019re simply going to call the <B>ReadAll<\/B> method to read the contents into a variable named strContents, then call the <B>Close<\/B> method to immediately close the file.<\/P>\n<P>But don\u2019t worry; once the contents of the file are in memory we won\u2019t need the file anymore. Listen, you can trust us on that; have the Scripting Guys ever let you down before?<\/P>\n<TABLE id=\"E3F\" class=\"dataTable\" cellSpacing=\"0\" cellPadding=\"0\">\n<THEAD><\/THEAD>\n<TBODY>\n<TR class=\"record\" vAlign=\"top\">\n<TD>\n<P class=\"lastInCell\"><B>Note<\/B>. It would probably be best if all those times we let people down were left <I>out<\/I> of our Wikipedia entry. After all, we assume that even Wikipedia imposes <I>some<\/I> sort of maximum length on articles.<\/P><\/TD><\/TR><\/TBODY><\/TABLE>\n<DIV class=\"dataTableBottomMargin\"><\/DIV>\n<P>As RP noted, he wants to extract all the text found between the <B>&lt;filecount&gt;<\/B> and <B>&lt;\/filecount&gt;<\/B> tags. We don\u2019t know for sure what RP\u2019s text files look like, so we\u2019re going to use the following as our sample file:<\/P><PRE class=\"codeSample\">&lt;filename&gt;Test.txt&lt;\/filename&gt;\n&lt;filedate&gt;10\/23\/2007&lt;\/filedate&gt;\n&lt;filecount&gt;786&lt;\/filecount&gt;\n&lt;filelocation&gt;C:\\Scripts&lt;\/filelocation&gt;\n<\/PRE>\n<P>We should point out that we\u2019re assuming that the two target tags appear only once in each file. Will this script work if those tags appear <I>more<\/I> than once? No. But maybe in the near future we\u2019ll write a follow-up column of our own and show you how to do that.<\/P>\n<P>We should also add that one nice thing about this script is that it will work regardless of what the file looks like. Suppose the file looked like this:<\/P><PRE class=\"codeSample\">&lt;filename&gt;Test.txt&lt;\/filename&gt;&lt;filedate&gt;10\/23\/2007\n&lt;\/filedate&gt;&lt;filecount&gt;786&lt;\/filecount&gt;&lt;filelocation&gt;\nC:\\Scripts&lt;\/filelocation&gt;\n<\/PRE>\n<P>No problem; the script will still be able to pick out the text between the target tags. That\u2019s true even if the text looked like this:<\/P><PRE class=\"codeSample\">&lt;filename&gt;Test.txt&lt;\/filename&gt;&lt;filedate&gt;10\/23\/2007\n&lt;\/filedate&gt;&lt;filecount&gt;786\n&lt;\/filecount&gt;&lt;filelocation&gt;C:\\Scripts&lt;\/filelocation&gt;\n<\/PRE>\n<P>Or if it looked like \u2013 well, you get the idea.<\/P>\n<P>At any rate, our next step is to assign our two tags to a pair of variables, one named strStartText, the other named strEndText:<\/P><PRE class=\"codeSample\">strStartText = &#8220;&lt;filecount&gt;&#8221;\nstrEndText = &#8220;&lt;\/filecount&gt;&#8221;\n<\/PRE>\n<P>That brings us to this little block of code:<\/P><PRE class=\"codeSample\">intStart = InStr(strContents, strStartText)\nintStart = intStart + Len(strStartText)\n<\/PRE>\n<P>What\u2019s going on here? Well, in the first line we\u2019re using the <B>InStr<\/B> function to determine the character position where the <I>&lt;filecount&gt;<\/I> tag begins; in our sample text file, that\u2019s going to be character position 65. In the second line, we\u2019re adding the length of the <I>&lt;filecount&gt;<\/I> tag (that is, the number of characters in the tag) to this value. The tag length is 11 which, when added to 65, makes the final value of intStart equal to 76. This also means that our target text is going to begin at character position 76. <\/P>\n<P>If you find that a bit confusing, take a peek at the following table. Here we\u2019ve mapped out character positions 65 through 75. As you can see, if <I>&lt;filecount&gt;<\/I> begins in character position 65 that means that it ends in character position 75:<\/P>\n<TABLE id=\"EUH\" class=\"dataTable\" cellSpacing=\"0\" cellPadding=\"0\">\n<THEAD><\/THEAD>\n<TBODY>\n<TR class=\"record\" vAlign=\"top\">\n<TD>\n<P class=\"lastInCell\"><B>65<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>66<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>67<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>68<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>69<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>70<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>71<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>72<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>73<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>74<\/B><\/P><\/TD>\n<TD>\n<P class=\"lastInCell\"><B>75<\/B><\/P><\/TD><\/TR>\n<TR class=\"evenRecord\" vAlign=\"top\">\n<TD>\n<P class=\"lastInCell\">&lt;<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">f<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">i<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">l<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">e<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">c<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">o<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">u<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">n<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">t<\/P><\/TD>\n<TD>\n<P class=\"lastInCell\">&gt;<\/P><\/TD><\/TR><\/TBODY><\/TABLE>\n<DIV class=\"dataTableBottomMargin\"><\/DIV>\n<P>And that means that the text we want to extract has to begin in character position 76.<\/P>\n<P>Next we use <I>this<\/I> line of code to determine where the second tag (<I>&lt;\/filecount&gt;<\/I>) begins:<\/P><PRE class=\"codeSample\">intEnd = InStr(strContents, strEndText)\n<\/PRE>\n<P>In our sample script, that\u2019s character position 79.<\/P>\n<P>We\u2019re getting closer now. Our next step is to determine how many characters we need to extract. We can calculate that value by subtracting the starting position of our target text (76) from the starting position of our closing tag (<I>&lt;\/filecount&gt;<\/I>):<\/P><PRE class=\"codeSample\">intCharacters = intEnd &#8211; intStart\n<\/PRE>\n<P>What does that give us? That gives us 79 minus 76 which, in turn, gives us 3. And 3 just happens to be the number of characters between the two tags.<\/P>\n<P>Once we know that, we can then call the <B>Mid<\/B> function and extract those characters:<\/P><PRE class=\"codeSample\">strText = Mid(strContents, intStart, intCharacters)\n<\/PRE>\n<P>All we\u2019re doing here is telling the script to take the value of strContents, start at character position 76 (intStart) and then count over 3 characters (intCharacters), scooping up each character along the way. And what exactly will we scoop up? This:<\/P><PRE class=\"codeSample\">786\n<\/PRE>\n<P>Pretty cool, huh?<\/P>\n<P>Now, without any additional explanation, here\u2019s a script that can perform this feat on all the text files in a folder, writing the retrieved file counts to a file named Totals.txt:<\/P><PRE class=\"codeSample\">Const ForReading = 1<\/p>\n<p>Set objFSO = CreateObject(&#8220;Scripting.FileSystemObject&#8221;)\nstrComputer = &#8220;.&#8221;<\/p>\n<p>Set objWMIService = GetObject(&#8220;winmgmts:\\\\&#8221; &amp; strComputer &amp; &#8220;\\root\\cimv2&#8221;)<\/p>\n<p>Set colFiles = objWMIService.ExecQuery _\n    (&#8220;ASSOCIATORS OF {Win32_Directory.Name=&#8217;C:\\Scripts&#8217;} Where &#8221; _\n        &amp; &#8220;ResultClass = CIM_DataFile&#8221;)<\/p>\n<p>For Each objFile In colFiles\n    Set objFile = objFSO.OpenTextFile(objFile.Name, ForReading)<\/p>\n<p>    strContents = objFile.ReadAll\n    objFile.Close<\/p>\n<p>    strStartText = &#8220;&lt;filecount&gt;&#8221;\n    strEndText = &#8220;&lt;\/filecount&gt;&#8221;<\/p>\n<p>    intStart = InStr(strContents, strStartText)\n    intStart = intStart + Len(strStartText)<\/p>\n<p>    intEnd = InStr(strContents, strEndText)<\/p>\n<p>    intCharacters = intEnd &#8211; intStart\n    strCount =  Mid(strContents, intStart, intCharacters)<\/p>\n<p>    strText = strtext &amp; strCount &amp; vbCrLf\nNext<\/p>\n<p>Set objFile = objFSO.CreateTextFile(&#8220;C:\\Scripts\\Totals.txt&#8221;)<\/p>\n<p>objFile.Write strText\nobjFile.Close\n<\/PRE>\n<P>Is that really going to work? Give it a try and see for yourself.<\/P>\n<P>If you\u2019re planning to rush out and create a new Wikipedia entry for the Scripting Guys, we should mention that Wikipedia prohibits \u201cpatent nonsense.\u201d According to Wikipedia\u2019s <A href=\"http:\/\/en.wikipedia.org\/wiki\/Wikipedia:Patent_nonsense\" target=\"_blank\"><B>deletion guidelines<\/B><\/A>, patent nonsense includes:<\/P>\n<TABLE class=\"numberedList\" border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n<TBODY>\n<TR vAlign=\"top\">\n<TD class=\"listNumber\" noWrap align=\"right\">\n<P>1.<\/P><\/TD>\n<TD>\n<P>Total nonsense, i.e., text or random characters that have no assignable meaning at all. This includes sequences such as &#8220;i9da7gy98sdygida%\u00a3U%ETDFHc8vda097tt{%\u00a3^O&amp;\u00a3^IEUyrhgietysbvd}TYu{og;d&#8221;, in which keys of the keyboard have been pressed with no regard for what is typed, (or typed with the eyes closed.) <\/P><\/TD><\/TR>\n<TR vAlign=\"top\">\n<TD class=\"listNumber\" noWrap align=\"right\">\n<P>2.<\/P><\/TD>\n<TD>\n<P>Content that, while apparently meaningful after a fashion, is so completely and irredeemably confused that no reasonable person can be expected to make any sense of it whatsoever.<\/P><\/TD><\/TR><\/TBODY><\/TABLE>\n<P>What does that mean to you? It means that you can go ahead and create a Scripting Guys entry; just don\u2019t try reprinting one of the <I>Hey, Scripting Guy!<\/I> columns. <\/P>\n<TABLE id=\"EDEAC\" class=\"dataTable\" cellSpacing=\"0\" cellPadding=\"0\">\n<THEAD><\/THEAD>\n<TBODY>\n<TR class=\"record\" vAlign=\"top\">\n<TD>\n<P><B>Note<\/B>. In case you\u2019re wondering, the answer is no; the Scripting Guys have no plans to sue Wikipedia. That\u2019s true even though the phrase \u201cContent that, while apparently meaningful after a fashion, is so completely and irredeemably confused that no reasonable person can be expected to make any sense of it whatsoever\u201d was obviously taken directly from the Script Center Style Guide. On top of that, the Scripting Guy who writes this column holds the patent on creating columns by pressing keys on the keyboard with no regard for what is being typed.<\/P>\n<P>But that\u2019s OK; we\u2019ll let this one slide.<\/P><\/TD><\/TR><\/TBODY><\/TABLE>\n<DIV class=\"dataTableBottomMargin\"><\/DIV>\n<TABLE id=\"EPEAC\" class=\"dataTable\" cellSpacing=\"0\" cellPadding=\"0\">\n<THEAD><\/THEAD>\n<TBODY>\n<TR class=\"record\" vAlign=\"top\">\n<TD>\n<P><B>Ed<\/B><B>itor\u2019s Note<\/B>. For the millions of faithful <I>Hey, Scripting Guy!<\/I> fans who follow this column regularly (okay, maybe \u201cmillions\u201d is a bit of an exaggeration \u2013 but we know there are two or three of you out there), the Scripting Editor \u2013 who was nowhere near even being born yet in 1949 \u2013 thought we should tie up some loose ends.<\/P>\n<P><A href=\"http:\/\/www.microsoft.com\/technet\/scriptcenter\/resources\/qanda\/oct07\/hey1016.mspx\"><B>Last week<\/B><\/A>, the Scripting Guy who writes this column mentioned the Washington vs. Oregon football game. This week he didn\u2019t. Enough said.<\/P>\n<P>The Scripting Guy who writes this column <A href=\"http:\/\/www.microsoft.com\/technet\/scriptcenter\/resources\/qanda\/oct07\/hey1002.mspx\"><B>predicted the winner of the World Series<\/B><\/A>. He also mentioned public ridicule\u2026Boston Red Sox fans, feel free to ridicule.<\/P><\/TD><\/TR><\/TBODY><\/TABLE><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hey, Scripting Guy! I have a whole bunch of text files in a folder. I need to open each of these files, extract everything between the &lt;filecount&gt; and &lt;\/filecount&gt; tags, and then write that information to a separate file. How can I do that?&#8212; RP Hey, RP. You know, the other day the Scripting Guy [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[3,4,14,5],"class_list":["post-63743","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-scripting-guy","tag-scripting-techniques","tag-text-files","tag-vbscript"],"acf":[],"blog_post_summary":"<p>Hey, Scripting Guy! I have a whole bunch of text files in a folder. I need to open each of these files, extract everything between the &lt;filecount&gt; and &lt;\/filecount&gt; tags, and then write that information to a separate file. How can I do that?&#8212; RP Hey, RP. You know, the other day the Scripting Guy [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/63743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=63743"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/63743\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=63743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=63743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=63743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}