{"id":76,"date":"2009-05-12T00:44:00","date_gmt":"2009-05-12T00:44:00","guid":{"rendered":"http:\/\/www.roysac.com\/blog\/wp-admin\/2009\/05\/ms-dos-commands-wild-cards-inputoutput-redirection-and-variables\/"},"modified":"2009-05-12T00:44:00","modified_gmt":"2009-05-12T00:44:00","slug":"ms-dos-commands-wild-cards-inputoutput-redirection-and-variables","status":"publish","type":"post","link":"http:\/\/www.roysac.com\/blog\/2009\/05\/ms-dos-commands-wild-cards-inputoutput-redirection-and-variables\/","title":{"rendered":"MS DOS Commands, Wild Cards, Input\/Output Redirection and Variables"},"content":{"rendered":"<p>While I was looking for ways to make my life easier by automating things, I rediscovered the <em>MS DOS<\/em> batch features of the latest <em>MS DOS<\/em> release and even more extended version of <em>MS DOS<\/em> for the early <em>Microsoft Windows<\/em> 32 bit Operating Systems, like <em>Windows 95<\/em>, <em>Windows CE<\/em> and Windows 98 (dubbed <em>MS DOS 7<\/em>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" title=\"dospromptani\" border=\"0\" alt=\"dospromptani\" align=\"right\" src=\"http:\/\/www.roysac.com\/blogimages\/dospromptani.gif\" width=\"295\" height=\"136\"> You can accomplish a lot of things right from the <em>DOS<\/em> prompt without needing to program fancy <em>Windows<\/em> Applications or something like that. <\/p>\n<p>Many things where I thought the use of ???real??? programming languages like <em>Visual Basic<\/em> or <em>VBScript<\/em> would be necessary, can be accomplished by using sequences of <em>MS DOS<\/em> commands in a Batch File (.<em>BAT<\/em>). <\/p>\n<p><em>BATCH<\/em> commands are supported by any <em>Microsoft Windows<\/em> Operation System right out of the box. You do not have to install anything, not mess around with permissions nor do you require <em>Administrator<\/em> rights and permission to write, edit or execute batch scripts.<\/p>\n<h3>The Basics for Newbies<\/h3>\n<p>To learn about the available commands and functions that you can use in <em>BATCH<\/em> files, open a <em>MS DOS<\/em> window first. To do that, click on ???<em>Start<\/em>???, then ???<em>Run<\/em>???, type ???cmd??? and then press the <em>ENTER<\/em> key on your keyboard.<\/p>\n<p>In the <em>MS DOS<\/em> window type ???help??? and then press <em>ENTER<\/em>. Returned will be a list of commands with a brief description of their purpose right next to each of them. Type ???help COMMAND???, where <em>COMMAND<\/em> stands for any command that was listed by ???<em>help<\/em>???, to get a detailed documentation and description of the individual <em>DOS<\/em> command. There is actually a <em>BATCH<\/em> file that was written by <a href=\"http:\/\/www.robvanderwoude.com\/\" target=\"_blank\">Rob Van der Woude<\/a>, which generates a <em>HTML<\/em> document from those ???<em>help<\/em>??? commands, something like a documentation or reference, if you will. You can <a href=\"http:\/\/www.robvanderwoude.com\/files\/allhelp_nt.txt\" target=\"_blank\">download the script source here<\/a>. Save it as <a href=\"http:\/\/www.robvanderwoude.com\/files\/allhelp_nt.txt\" target=\"_blank\">AllHelp.bat<\/a> and then execute it. When it is done, you should have a new file with the name ???<em>allhelp.htm<\/em>??? in the same folder as the batch file itself. You can open the <em>HTML<\/em> file with any web browser.<\/p>\n<p>That covers the basics. The rest of this post is more advanced and for people who are familiar with the basic <em>MS DOS<\/em> batch features and syntax.<\/p>\n<h3>MS DOS (and Windows) Wild Cards<\/h3>\n<p>I will explain the wildcards characters used in MS DOS and also Windows for File and Folder Filtering in commands like the &#8220;<em>DIR<\/em>&#8221; command and other file based operations. It causes sometimes for confusion and even confused me that I decided to look it up and also conducted some tests to verify the claims made by various people. <\/p>\n<p>There are two (2) wild card characters that can be used for the file system commands in MS DOS and Windows; the question mark character (<strong>?<\/strong>) and the asterix or star character (<strong>*<\/strong>). <\/p>\n<ul>\n<li><strong>? <\/strong>Matches any single (1) character. It also matches no (0) characters (none), if it is being used in the leading or trailing position of the filter.  <\/li>\n<li><strong>*<\/strong> Matches matches any and no characters, regardless of its position in the filter <\/li>\n<\/ul>\n<p>Here are some examples to illustrate the subtle nuances between each of the two wildcards. <img loading=\"lazy\" decoding=\"async\" title=\"Joker_Playing_Card_clipart_image\" border=\"0\" alt=\"Joker_Playing_Card_clipart_image\" align=\"right\" src=\"http:\/\/www.roysac.com\/blogimages\/Joker_Playing_Card_clipart_image.jpg\" width=\"105\" height=\"175\"><\/p>\n<p>abc*f???? matches abcdf, abcdef??and abcf <br \/>abc*?????? matches abc, abcd and abcde <br \/>*def?????? matches def, cdef and abcdef <\/p>\n<p>abc?ef?? matches abcdef but <strong>NOT<\/strong> abcef <br \/>abc??????? matches abc and abcd but <strong>NOT<\/strong> abcde <br \/>?def?????? matches def and cdef but <strong>NOT<\/strong> abcdef (and also <strong>NOT<\/strong> bcdef) <br \/>??def???? matches def, cdef and bcdef but <strong>NOT<\/strong> abcdef<\/p>\n<h3>File System Commands Input and Output Routing <\/h3>\n<p>Placeholders used: <\/p>\n<ul>\n<li><strong>COMMAND<\/strong> stands for the command line command string, which could be anything from the &#8220;<em>DIR *.*<\/em>&#8221; command to &#8220;<em>ECHO Hi<\/em>&#8221;  <\/li>\n<li><strong>SRC<\/strong> stands for Source  <\/li>\n<li><strong>DEST<\/strong> stands for Destination <\/li>\n<li><strong>STDIN<\/strong> (0) stands for Standard Input or channel <strong>0<\/strong>  <\/li>\n<li><strong>STDOUT<\/strong> (1)?? stands for Standard Output or channel 1  <\/li>\n<li><strong>STDERR<\/strong> (2) stands for Errors or channel <strong>2<\/strong> <\/li>\n<\/ul>\n<p><em>STDIN<\/em> and <em>STDOUT<\/em> can be various different things, such as: <\/p>\n<ul>\n<li><strong>NUL<\/strong> = Nothing (usually used for suppressing any output to anywhere)  <\/li>\n<li><strong>CON<\/strong> = Console or Screen <img loading=\"lazy\" decoding=\"async\" title=\"redirect-detour\" border=\"0\" alt=\"redirect-detour\" align=\"right\" src=\"http:\/\/www.roysac.com\/blogimages\/redirectdetour.gif\" width=\"240\" height=\"180\"><\/li>\n<li><strong>PRN<\/strong> = Printer (Only works, if a DOS printer is configured on LPT1)  <\/li>\n<li><strong>AUX<\/strong> = Auxiliary  <\/li>\n<li><strong>COM1<\/strong> &#8230; <strong>COM9<\/strong> = Serial Ports 1 to 9  <\/li>\n<li><strong>LPT1<\/strong> &#8230; <strong>LPT9<\/strong> = Parallel Ports 1 to 9  <\/li>\n<li><strong><em>FileName<\/em><\/strong> = a File Name, File Path\/Location &#038; File Name  <\/li>\n<li><strong><em>Command<\/em><\/strong> = another Command <\/li>\n<\/ul>\n<p>The character ???<strong><<\/strong>??? (less than) stands for Input, the character ???<strong>><\/strong>??? (greater than) stands for Output (with overwrite) and 2x ???>??? (greater than)?? = ???<strong>>><\/strong>??? also stands for Output, but without overwrite (appending).<\/p>\n<p>COMMAND<strong>><\/strong>DEST redirects the Standard Output of <strong><em>COMMAND<\/em><\/strong> to <strong><em>DEST<\/em><\/strong> (Overwriting Previous Outputs) <br \/>COMMAND<strong>>><\/strong>DEST redirects the Standard Output of <strong><em>COMMAND<\/em><\/strong> to <strong><em>DEST<\/em><\/strong> (Not Overwriting Previous Outputs) <br \/>COMMAND<strong><<\/strong>SRC feeds <strong><em>COMMAND<\/em><\/strong> via the Standard Input from <strong><em>SRC<\/em><\/strong> <\/p>\n<p>If you redirect the output to a File for example, you maybe noticed that sometimes not everything is being redirected into the file and some output still occurs on the screen. The reason for that is that you only redirect the <em>STDOUT<\/em> channel, but not the <em>STDERR<\/em> channel, which some commands and applications actually use for their error messages output. If you want to redirect the <em>STDERR<\/em> output to the same output channel specified <em>as<\/em> <em>DEST<\/em> use the following syntax: <\/p>\n<p>COMMAND>DEST 2>&#038;1 <\/p>\n<p><em>COMMAND<\/em> output &#8220;>&#8221; redirect to <em>DEST<\/em> (<em>STDOUT<\/em>), &#8220;<em>space<\/em>&#8220;, 2, which stands for <em>STDERR<\/em> and &#8220;>&#8221; redirect to ???<em>&#038;1<\/em>???, which stands for <em>STDOUT. (Update 7\/18\/2009: I updated the post and fixed a typo that I made before. I entered 2>&#038;0 instead of 2>&#038;1, which would crash the Batch, because you would feed the error messages back as input to the command. I apologize for this error.)<\/em>??<\/p>\n<h3>Variables in MS DOS Batch<\/h3>\n<p>The basics are clear to most folks, like setting a new environment variable with Set VARNAME = VALUE, returning the current value of <em>VARNAME<\/em> via SET VARNAME or using the <em>VALUE<\/em> of <em>VARNAME<\/em> via %VARNAME% in the batch script code. Also the use of the runtime generated variables %1 ??? %X for the command line parameters that were passed to the batch script are basic <em>BATCH<\/em> script knowledge.<\/p>\n<p>As you know, parameter values that include the space (blank) character, must be enclosed in double-quotes (???) to avoid that the <em>BATCH<\/em> script will interpret the individual segments before and after a space as separate parameters. For example BATCH.BAT C:\\Documents and Settings would result in three (3) parameters in the Batch Script, like:<\/p>\n<p>%1 = C:\\Documents <br \/>%2 = and <br \/>%3 = Settings<\/p>\n<p>You have to enter BATCH.bat ???C:\\Documents and Settings??? instead to have the path only appear as one (1) parameter in the batch, which is accessible via %1<em>.<\/em> The problem is that %1 will also include the double-quotes, which are not really part of the value that you want to pass. In many cases this does not matter or is even good, if you invoke file commands for example, where the parameter should again be enclosed in double-quotes to work properly.<\/p>\n<blockquote>\n<p>To remove the enclosing (???) (double-quotes) from a parameter, add the character ???~??? (tilde) after the ???%??? (percent) sign. For example: %~1 <\/p>\n<\/blockquote>\n<p>This does not work for regular environment variables that were created via the ???SET??? command. The following would not work and error out, if you try to execute it:<\/p>\n<p>SET VAR=???VALUE??? <br \/>ECHO %~VALUE%<\/p>\n<p>Other characters that require that a parameter value will be enclosed in double-quotes are: &#038;()[]{}^=;!&#8217;+,`~ <\/p>\n<p>Did you know that %0 also exists? %0 stands for the?? command?? itself. In the examples above, %0 would return BATCH.bat. <u><strong>Note<\/strong><\/u>: Calling the script via the command BATCH without the extension ???.bat??? is also valid, if no other executable with the same base name exists in the same directory or path (e.g. a <em>BATCH.exe<\/em> or <em>BATCH.com<\/em>). If the batch file is executed this way, %0 also would not include the extension and simply return the value BATCH. <\/p>\n<h4>The SET Command<\/h4>\n<p>Typical use would be this: Set Counter = 0?? where the value of ???<em>Counter<\/em>??? would then be accessible in the batch script (and beyond!) via %Counter% <\/p>\n<p>Using the parameter <strong><em>\/A<\/em><\/strong> indicates that the variable has a numeric value and should also be treated as such. This is important if you want to do arithmetic operations with a variable such as: set \/A Counter+=1<\/p>\n<p>This is especially powerful in combination with the ???<em>Delayed Environment Variables Expansion<\/em>??? feature enabled. <br \/>See more about this option further down below.<\/p>\n<p>set \/P VARNAME=Prompt_String<\/p>\n<p>Displays ???<em>Prompt_Sting<\/em>???, then waits for user input (in <em>DOS<\/em>, not a Windows Input Box) and stores the entered value in the variable <em>VARNAME<\/em> once the user finished his input by pressing the <em>ENTER<\/em> key.<\/p>\n<p><strong>Arithmetic Operators for the SET Command<\/strong><\/p>\n<p>()?????????????????????????????????? &#8211; grouping <br \/>! ~ -???????????????????????????? &#8211; unary operators <br \/>* \/ %???????????????????????????? &#8211; arithmetic operators <br \/>+ -???????????????????????????????? &#8211; arithmetic operators <br \/><< >>???????????????????????????? &#8211; logical shift <br \/>&#038;???????????????????????????????????? &#8211; bitwise and <br \/>^???????????????????????????????????? &#8211; bitwise exclusive or <br \/>|???????????????????????????????????? &#8211; bitwise or <br \/>= *= \/= %= += -=?????? &#8211; assignment <br \/>&#038;= ^= |= <<= >>= <br \/>,???????????????????????????????????? &#8211; expression separator <\/p>\n<h4>String Substitutions<\/h4>\n<p>%PATH:str1=str2%?? = Expands <em>PATH<\/em> and substitutes any occurrences of <em>str1<\/em> with <em>str2<\/em><\/p>\n<h4>String Offsets<\/h4>\n<p>%PATH:~10,5% = Expands <em>Path<\/em> and use 5 characters of the value from position 11 (offset) only<\/p>\n<h4>Left &#038; Right String Functions<\/h4>\n<p>%PATH:~0,-2% = Expands <em>PATH<\/em> and uses all but the last 2 characters of the value<\/p>\n<h4>Other system environment variables <\/h4>\n<p>Other variables than %PATH%, which I used in the previous examples, which are good to know, but also require that <em>EXTENSIONS<\/em> were enabled via the SETLOCAL ENABLEEXTENSIONS command or via cmd.exe parameter.<\/p>\n<ul>\n<li>%CD% = Path to current directory  <\/li>\n<li>%DATE% = Current Date  <\/li>\n<li>%TIME% = Current Time  <\/li>\n<li>%RANDOM% = Expands to a random number between 0 and 32767  <\/li>\n<li>%ERRORLEVEL% = Returns the current ErrorLevel value  <\/li>\n<li>%CMDEXTVERSION% = Version of the current command processor extensions  <\/li>\n<li>%CMDCMDLINE% = original command line that invoked the command processor <\/li>\n<\/ul>\n<h4>Delayed Environment Variables Expansion<\/h4>\n<p>Always disabled by default, but may be enabled\/disabled via the <em><strong>\/V<\/strong><\/em> command line switch (\/V:ON; \/V:OFF) to <strong><em>CMD.EXE<\/em><\/strong> or via the command ???setlocal enabledelayedexpansion??? at run-time.?? <\/p>\n<p><em>Qlemo<\/em> pointed out correctly via a blog comment that you can also make a change to the system registry, to enabled delayed expansion of environment variables by default, if <strong>CMD.EXE<\/strong> is invoked. This can be set on individual user level (<em>HKEY_CURRENT_USER<\/em>) or machine wide, for all users (<em>HKEY_LOCAL_MACHINE<\/em>). <\/p>\n<p><strong>Key:<\/strong> HKCU or HKLM\\Software\\Microsoft\\Command Processor <br \/><strong>Value Name:<\/strong> DelayedExpansion<br \/><strong>Value (REG_DWORD):<\/strong> hex:0x1 to enable or hex:0x0 to disable delayed expansion.<\/p>\n<p>If you don&#8217;t know how to change the settings in the registry, never mind, because only experienced users should make modifications to the system registry. Changes to the registry can cause the system to crash and worse.<\/p>\n<p>Disabled delayed variables expansion means that variables will be expanded at the time they are parsed, which is bad, if the value of the variable is supposed to change within the batch script itself. Here is a nice example script to illustrate the different behavior. <\/p>\n<div>\n<div>\n<pre><span>   1:<\/span> <span>set<\/span> VAR=before<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   2:<\/span> <span>if<\/span> <span>\"%VAR%\"<\/span> == <span>\"before\"<\/span> (<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   3:<\/span>     <span>set<\/span> VAR=after<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   4:<\/span>     <span>if<\/span> <span>\"%VAR%\"<\/span> == <span>\"after\"<\/span> @echo <span>If<\/span> you see this, it worked<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   5:<\/span> )<\/pre>\n<p><!--CRLF--><\/div>\n<\/div>\n<p><\/p>\n<p>If you run this, the script should return nothing. The second IF statement never can become true, even though you have the ???SET??? command right before it that should have changed the variable???s value to make the IF statement true. Why? Because %VAR% was already set to ???<em>before<\/em>??? and because of that expands to ???<em>before<\/em>??? throughout the entire script. Now add at the very top the line ???setlocal enabledelayedexpansion??? and run the script again. Now you should get the text ???<em>If you see this, it worked??? back as a result<\/em>.<\/p>\n<p>Here is another example of the implication of the ???setlocal enabledelayedexpansion????? statement.<\/p>\n<div>\n<div>\n<pre><span>   1:<\/span> <span>set<\/span> LIST=<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   2:<\/span> <span>for<\/span> %%i <span>in<\/span> (*) <span>do<\/span> <span>set<\/span> LIST=!LIST! %%i<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   3:<\/span> echo %LIST%<\/pre>\n<p><!--CRLF--><\/div>\n<\/div>\n<p><\/p>\n<p>This script will not return the list of all files in the current directory. It will only show one file name of the directory. It would work the same way as if you would have made the FOR command statement to:<\/p>\n<p>for %%i in (*) do set LIST=%%i<\/p>\n<p>Add ???setlocal enabledelayedexpansion????? at the top of the script again and run it once more. <br \/>Another typical use where enabling delayed expansion is crucial, are <strong>Counters<\/strong> and other mathematical operations and manipulation of values during the execution of a <em>BATCH<\/em> script.<\/p>\n<h4>The SHIFT Command<\/h4>\n<p>The SHIFT Command is probably difficult to get its head around it. The applications are versatile. Shift basically shifts the sequence of parameters to the left. <em>Parameter 2<\/em> becomes <em>Parameter 1<\/em>, <em>Parameter 1<\/em> disappears and <em>Parameter 2<\/em> would be empty, unless there is another <em>Parameter 3<\/em>. This is hard to grasp, so here is a short sample batch that illustrates this behavior.<\/p>\n<div>\n<div>\n<pre><span>   1:<\/span> @echo off<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   2:<\/span> <span>Call<\/span> :testfn 1 2<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   3:<\/span> goto :EOF <\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   4:<\/span> :testfn<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   5:<\/span> echo 1 = %1, 2 = %2<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   6:<\/span> echo shift<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   7:<\/span> shift<\/pre>\n<p><!--CRLF--><\/p>\n<pre><span>   8:<\/span> echo 1 = %1, 2 = %2<\/pre>\n<p><!--CRLF--><\/div>\n<\/div>\n<p>Results: <\/p>\n<div>\n<pre><br> 1 = 1, 2 = 2<br> shift<br> 1 = 2, 2 =<br><\/pre>\n<\/div>\n<p>There are other variables like the ones starting with <strong>2x ???%???<\/strong> like %%a or variables that are enclosed in <strong>???!???<\/strong> instead of <strong>???%???<\/strong>, like !VARNAME! instead of %VARNAME%, but that would require me to make this post much longer than it already is. Check the help for the ???FOR???, ???SET??? and ???CMD??? commands to learn more about them.<\/p>\n<h3>Additional Resources to BATCH Scripting<\/h3>\n<ul>\n<li><a href=\"http:\/\/www.robvanderwoude.com\/batchfiles.php\" target=\"_blank\">Rob Van der Woude Batch Files Page<\/a> by Rob Van der Woude<\/li>\n<li><a href=\"http:\/\/www.dostips.com\/DtCodeBatchFiles.php\" target=\"_blank\">Batch File Examples at DosTip.com<\/a><\/li>\n<li><a href=\"http:\/\/www.ss64.com\/nt\/syntax.html\" target=\"_blank\">Windows XP Command Line Syntax<\/a> by Simon Sheppard at SS64.com<\/li>\n<li><a href=\"http:\/\/www.allenware.com\/icsw\/icswidx.htm\" target=\"_blank\">DOS Batch Lessons at Allenware.com<\/a><\/li>\n<li><a href=\"http:\/\/www.allenware.com\/icsw\/icswref.htm\" target=\"_blank\">Batch Reference at Allenware.com<\/a><\/li>\n<li><a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/cc722865.aspx\" target=\"_blank\">MS DOS Fasthelp at MS Technet<\/a><\/li>\n<li><a href=\"http:\/\/www.bookcase.com\/library\/software\/msdos.util.batch.html\" target=\"_blank\">Collection of BATCH file tools at Bookcase.com<\/a><\/li>\n<li><a href=\"http:\/\/beta.experts-exchange.com\/articles\/Programming\/Languages\/Scripting\/Shell\/Batch\/Advanced-DOS-batch-pitfalls.html\" target=\"_blank\">Advanced DOS Batch Pitfalls<\/a> (article) by expert <a href=\"http:\/\/beta.experts-exchange.com\/M_3382638.html\" target=\"_blank\">Qlemo<\/a> at Experts-Exchange.com<\/li>\n<\/ul>\n<p>I hope that you find this post of mine useful. Use the comment section below for comments, feedback, suggestions and expressions of appreciation :). Thank you.<\/p>\n<p><\/p>\n<p>Cheers!<\/p>\n<p><\/p>\n<p><a href=\"http:\/\/www.roysac.com\/\" target=\"_blank\">Carsten aka Roy\/SAC<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>While I was looking for ways to make my life easier by automating things, I rediscovered the MS DOS batch features of the latest MS DOS release and even more extended version of MS DOS for the early Microsoft Windows 32 bit Operating Systems, like Windows 95, Windows CE and Windows 98 (dubbed MS DOS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-tools"],"_links":{"self":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/comments?post=76"}],"version-history":[{"count":0,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts\/76\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/media?parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/categories?post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/tags?post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}