Outre SED, comment un signe égal peut-il être remplacé? Et comment puis-je utiliser une variable de chaîne dans le remplacement de chaîne?
considérer cet exemple: p> deux problèmes: p> premier, je ne peux pas utiliser le variable% t% in!: = !. p> second, je ne peux pas remplacer le signe égal de la ligne de commande p>
6 Réponses :
Le Le problème "T" est facile de Résolvez dans une boucle en utilisant un autre pour variable p> Il n'y a pas de solution de lot natif simple pour remplacer Si vous voulez vraiment faire cela à l'aide de commandes pure Windows Batch, il y a quelques idées intéressantes à http://www.dosteps.com/forum/viewtopic.php?t=1485 a> p> p> SetLocal Enabledexpansion code> doit être déplacé après que votre ancienne affectation = %% B en cas %% B contient
! code>.
= code>. Vous pouvez parcourir la chaîne, le caractère par caractère, mais c'est lent. Votre meilleur pari est probablement de basculer vers VBScript ou JScript, ou utiliser un utilitaire non natif. P>
Je vois. Peut-être que j'ai besoin d'approcher VBScript, VB ou C #. Il semble qu'ils sont une version avancée de la commande DOS. Que diriez-vous si le texte est comme ceci: c'est une pomme. Ceci est un chat. L'utilisation des codes se débarrasse de tout le "est". Nous savons comment faire un mot entier ne remplacer que dans VB, mais qu'en est-il de la commande DOS? Est-ce impossible? La même chose au cas de signe égal?
Si vous souhaitez seulement remplacer des mots entiers, le script de lot n'est pas une bonne option. Il peut être approché, mais vous serez bien mieux en utilisant quelque chose qui prend en charge la recherche de regex et remplacer, tels que VBScript.
Oui. Je vois. Merci de me diriger vers les langues appropriées.
"Peut-être que j'ai besoin d'aborder VBScript, VB ou C #. Il semble qu'ils sont une version avancée de la commande DOS." +1 pour "C # est une version avancée de la commande DOS" ...
Pourquoi ne pas utiliser Edlin? Je n'ai pas trouvé de moyen de le faire avec un fichier initial et aucune erreur d'Edlin, mais ne les ignorez pas avec NUL:. Étranglier, le type% 0 inclut le fichier entier même s'il y a une fin du caractère de fichier entre le = et!, À l'aide de type sur le fichier de commandes après son exécution ne fonctionnera pas de la même manière.
@ECHO OFF GOTO skip 1,1r=! e :skip SET "new==old=============" ECHO %new% > %TEMP%\var.tmp TYPE %0 > %TEMP%\edlin.tmp EDLIN %TEMP%\var.tmp < %TEMP%\edlin.tmp > NUL: SET /P newnew=<%TEMP%\VAR.TMP ECHO %newnew% ERASE %TEMP%\VAR.TMP ERASE %TEMP%\VAR.BAK ERASE %TEMP%\edlin.tmp
Le caractère fin du fichier a été supprimé lorsque j'ai posté. Il devrait être entre le = et! sur la troisième ligne.
Ma réponse d'un autre poste, mais elle s'applique aussi ici:
Il y a une alternative plus facile. Au lieu de passer une valeur qui contient un signe égal, essayez plutôt quelque chose comme un colon à la place. Ensuite, grâce à la possibilité de modifier cette valeur (le côlon), vous pouvez le convertir dans un égal. Voici un exemple: p> Lorsque vous exécutez le fichier de commandes, appelez-le comme ceci: p> la sortie serait Soyez: P> param = "some name:another value"
base = some name:another value
pair = some name=another value
name = some name
value = another value
Vous pouvez utiliser une séquence pour remplacer temporairement les caractères spéciaux par des espaces réservés? 00 ,? 01 ,? 02 et? 03. J'utilise essentiellement ces séries de scripts: p> restaore_sys_chars.bat: fort> p> Exemple: strong> p> test.txt: Strong> p> résultat: strong> p> fonctionnalités em>: p>
Je viens de créer une solution simple pour cela moi-même, peut-être que cela aide quelqu'un.
L'inconvénient (ou avantage dépend de ce que vous voulez faire) est-ce que plusieurs signes égaux l'un après l'autre sont manipulés comme un seul signe égal . (Exemple: "str == ING" donne la même sortie que "str = ing") p> Comme vous l'avez vu, vous utilisez la fonction comme ceci: p > call :replaceEqualSign in variableName with newString
Je cherchais cela, parce que j'avais besoin de me débarrasser = dans une chaîne comme "Test = Goon" J'ai constaté que appeler un prochain batchfile avec Test = Goon comme paramètres, j'ai des paramètres 1, "Test" et 2, "Ginkon", dans ce lotfile.
Ainsi: Batchfile 1: p>
arg1: test arg2: goingon
Travaillez-vous vraiment dans DOS ou voulez-vous simplement dire l'invite de commande Windows?
Eh bien, bien sûr,
% T% code> ne peut pas fonctionner car il est remplacé avant i> la boucle est pareille.
Damien, c'est évidemment
cmd code>.
@Joey - Bien sûr que c'est - mais j'adopte parfois un style rhétorique pour essayer de faire comprendre aux gens qu'ils sont inexacts dans leur terminologie.
Damien, j'ai depuis longtemps abandonné cela, je viens de modifier silencieusement;)