Reputation: 301
I am trying following command
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
getting following out put
index.html:<img src="/icons/unknown.gif" alt="[ ]"> <a
href="MOD13Q1.A2018257.h25v06.006.2018282132046.hdf">
FINDSTR: Cannot open >temp.txt
it is not saving the output to temp.txt other commands like
dir * >list.txt
are working fine
Upvotes: 3
Views: 7260
Reputation: 70923
You have found one problem caused by the difference in quote handling between cmd
parser and executable programs argument parsers.
While this is what seems correct
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^^ escaped quote to findstr
^.............^ ^..........^ arguments to findstr
^ redirection operator
your problem is that when cmd
tries to parse the line (to create the internal representation of the command and determine if a redirection is needed or not), as for cmd
a double quote is a "escaped" (close and open again) quote, the quotes seen are
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^^ escaped quote
^ open ^close ^open
This implies everyting is seen as arguments to findstr
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^.....^ command
^........................................^ argument
The escaped quote hides the redirection operator to cmd
that passes evething to findstr
.
Inside findstr
the argument handling is different and it sees
findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt
^.............^ ^..........^ ^.......^ arguments to findstr
That means that the intended redirection is now seen as a file where to search.
One simple solution is to simply change the position of the redirection
>temp.txt findstr /RC:"h25v06.*hdf\"" "index.html"
BUT this leaves another problem. As it is quoted if the file name being processed by findstr
includes spaces or special characters the command will fail because they are out of a quoted area.
So, we need a way to separate the two quotes, without including a non desired character in the findstr
expression but properly closing each quoted area
findstr /RC:"h25v06.*hdf\"^" "index.html" >temp.txt
^"
is seen by cmd
as a real escaped quote out of a quoted area (closed by the preceding quote) so the ^
will not be passed to findstr
. Now for cmd
the quoted areas are
findstr /RC:"h25v06.*hdf\"^" "index.html" >temp.txt
^............^ ^..........^
The problematic quote is a escaped sequence that is handled as another character and findstr
receives the intended arguments
findstr /RC:"h25v06.*hdf\"" "index.html"
^.............^ ^..........^
Upvotes: 7