2012-11-05 4 views
1

J'ai trouvé un moyen de supprimer le texte de mon dossier, comme:batchfile: remplacer le caractère fonctionnel

set text=!text:^"~JP~"=! 

supprime le texte ~JP~. Cela fonctionne bien, car il n'y a pas de caractère fonctionnel à supprimer. Maintenant, j'ai le → de caractère (comme le montre la flèche vers la droite, le code ASCII 22, hex 1A) -

set text=!text:^"→ "=! 

résultats dans une erreur (et de certains bip). La ligne est divisée en

set text=!text:^" 
"=! 

Y a-t-il un moyen de le faire? Comme comparer le texte au code hexadécimal 22 1A 09 22 (22 = ", 1A = →, 09 = tab)?

Répondre

3

Comme jeb expliqué dans sa réponse, l'analyseur de lot convertit 0x1A en un saut de ligne, mais la recherche et le remplacement peut être effectué si des variables sont utilisées Voici un exemple de ce dont jeb parlait J'ai inclus la chaîne (en code hexadécimal) 0x1A 0x09 dans le fichier batch J'utilise FOR/F avec FINDSTR pour obtenir la valeur dans une variable FOR. Tout ce qui suit est assez simple.

@echo off 
setlocal enableDelayedExpansion 
:::→ : 
for /f "delims=:" %%A in ('findstr "^:::" "%~f0"') do (
    set "text=abc"%%A"def" 
    set text 
    set "text=!text:"%%A"=!" 
    set text 
) 

Et voici les résultats:

text=abc"→  "def 
text=abcdef 

Je n'ai pas les guillemets witin le texte intégré parce que tout après la doit être une syntaxe valide. L'onglet et le signe deux-points sont inoffensifs, mais une citation conduirait à une erreur de syntaxe.

Le comportement de 0x1A se comportant comme un saut de ligne peut être utile. C'est le mécanisme que j'ai l'habitude de résoudre: Is it possible to embed and execute VBScript within a batch file without using a temporary file?

+0

big thanx pour votre aide! – user1799771

1

Vous pouvez même remplacer des caractères comme 0x1A, mais ce caractère est un peu problématique, car il sera converti en un saut de ligne lors de l'analyse du fichier batch.

mais en utilisant une variable avec le contenu de 0x1A fonctionnera.

Questions connexes