Domanda

Come posso evitare correttamente una virgoletta in una stringa di ricerca quando utilizzo findstr.exe?

Esempio:

findstr /misc:"namespace=\"" *.cs > ns.txt

Questo viene restituito alla console, anziché al file che ho specificato.

Lo sto facendo direttamente dalla riga di comando, non in realtà in un file batch, sebbene anche queste informazioni potrebbero essere utili.

È stato utile?

Soluzione

Correggetemi se sbaglio, ma credo di aver capito:

findstr.exe /misc:^"namespace=\^"^" *.cs > ns.txt

Questo sembra fornire l'output corretto, anche se sono presenti spazi nella stringa di ricerca.Consente il corretto funzionamento del reindirizzamento dei file, del piping e di valori letterali aggiuntivi nella stessa chiamata findstr.exe.

Il comando originale nella mia domanda non funziona perché sia ​​cmd.exe che findstr.exe hanno un'elaborazione speciale per " carattere.Mi sono ritrovato con una serie di virgolette senza eguali nell'elaborazione di cmd.exe.

Il nuovo comando nella mia risposta funziona perché ^" consente alla virgoletta di passare da cmd.exe a findstr.exe e \" dice a findstr.exe di ignorare quella citazione ai fini dell'elaborazione dei comandi e di trattarla come un carattere letterale.

Modificare:

Bene, la mia soluzione era giusta, ma il motivo per cui era corretta era totalmente sbagliato.Ho scritto un piccolo programma per testarlo.

Ho scoperto che cmd.exe passa questo input al programma quando passo la riga di comando errata:

test.exe /misc:namespace=" *.cs > ns.txt

Con i caratteri sfuggiti correttamente, cmd.exe passa questo input al programma (e reindirizza l'output a un file):

test.exe /misc:namespace=" *.cs

Altri suggerimenti

Fondare Ri: Findstr cerca un preventivo e il reindirizzamento/tubo dell'uscita

Try this: 

findstr > x.txt /S /I /M /C:"\.\"" * 

Non ho idea del perché funzioni.

Tuttavia, non funziona per pipì l'output. Vedi il collegamento correlato L'output di Piping Findstr

Secondo i miei test il carattere di fuga corretto è la retroscena:

c:\Temp>findstr /isc:"session id=\"59620\"" C:\Temp\logs\some*.xml
C:\Temp\logs\some_2016_11_03.xml: <session id="59620" remoteAddress="192.168.195.3:49885"/>

Non sarebbe abbastanza:

findstr /misc:namespace=^" *.cs > ns.txt

?

MODIFICARE

Se stavi cercando un modo per passare il " Carattere all'interno di un parametro citato, quindi potrebbe essere (usando il tuo esempio)

findstr /misc:"namespace=""" *.cs > ns.txt

(il " Il carattere viene ripetuto due volte all'interno di una stringa citata).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top