Échapper à une citation dans findstr chaîne de recherche
Comment puis-je échapper correctement un devis dans une chaîne de recherche lors de l'utilisation de findstr.exe?
Exemple:
findstr /misc:"namespace=\"" *.cs > ns.txt
Cette sortie de la console, au lieu de vers le fichier que j'ai précisé.
Je suis en train de faire cela directement sur la ligne de commande, pas réellement dans un fichier de commandes, bien que cette information pourrait être utile aussi.
OriginalL'auteur Merlyn Morgan-Graham | 2011-02-13
Vous devez vous connecter pour publier un commentaire.
S'il vous plaît corrigez-moi si je me trompe, mais je crois que j'ai compris:
Ce qui semble donner de bons résultats, même si vous avez de la place dans votre chaîne de recherche. Il permet fichier de redirection, de la tuyauterie, et d'autres littéraux dans le même findstr.exe invocation pour fonctionner correctement.
La commande d'origine dans ma question ne fonctionne pas parce que les deux cmd.exe et findstr.exe ont un traitement spécial pour les
"
caractère. J'ai fini avec une incomparable ensemble de citations dans cmd.exe'traitement.La commande nouveau dans ma réponse fonctionne parce que
^"
permet de le citer pour passer de cmd.exe pour findstr.exe et\"
dit findstr.exe pour ignorer cette citation de commande de traitement de l'information, et de le traiter comme un caractère littéral.Modifier:
Bien, ma solution est bonne, mais la raison pour laquelle il est correct était totalement faux. J'ai écrit un petit programme de test.
J'ai trouvé que cmd.exe passe cette entrée dans le programme quand je passe la mauvaise ligne de commande:
Avec les personnages d'échapper correctement, cmd.exe passe cette entrée pour le programme (et redirige la sortie vers un fichier):
OriginalL'auteur Merlyn Morgan-Graham
Trouvé Re: FINDSTR recherche pour un couble de devis et de rediriger/tuyau de la sortie
Je n'ai aucune idée de pourquoi cela fonctionne.
Ne fonctionne pas pour la tuyauterie de sortie. Voir le lien associé tuyauterie findstr de sortie
Oui, les redirections sont admis à l'avant, au milieu ou à la fin d'une ligne, même plusieurs redirections sont autorisés, mais seulement la dernière entrera en vigueur.
OriginalL'auteur typo.pl
Selon mes tests, le bon caractère d'échappement antislash:
OriginalL'auteur Ciove
Ne serait-ce pas juste assez:
?
MODIFIER
Si vous avez été la recherche d'un moyen de passer le
"
caractère à l'intérieur d'une cité paramètre, alors il pourrait être (à l'aide de votre exemple)(le
"
caractère est répété deux fois à l'intérieur d'une chaîne de caractères entre guillemets).Morgan-Graham: Ajout de la solution d'un problème plus général.
Découvrez ma réponse. Il gère correctement les cas tels que celui -
findstr /c:"this is ""a test""" blah.txt
, lorsque blah.txt ne contient que la lignethis is "a test"
. Double citant ne permettent pas de résoudre le problème lorsque les espaces sont impliqués.En effet, ma solution ne semble fonctionner que jusqu'à ce que vous ajoutez un espace quelque part après l'intérieur (répliqué) de guillemets doubles. I. e., cela fonctionne encore (affiche l'écho de résultat):
echo this is "a test"|findstr /c:"this is ""a"
. Et ce n'est pas (se plaint de ne pas être en mesure d'ouvrir 'a'):echo this is "a test"|findstr /c:"this is ""a "
. +1 pour ta solution, je pense que vous devriez l'accepter.Merci pour l'aide, cependant. J'aimerais ne pas avoir à ajouter de tout ce qui s'échapper de bruit...
OriginalL'auteur Andriy M