2013-08-14 3 views
0

J'essaie de remplacer les caractères spéciaux d'une chaîne par lot. J'ai essayé ceci:LOT: Changer les caractères spéciaux des noms de fichiers (é è à ...)

set filename=%filename:é=e% 
set filename=%filename:è=e% 

Mais cela ne fonctionne pas!

DOS ne comprend aucun de ces caractères correctement pour une raison quelconque. Voici une capture d'écran (Notez que le OUTPUT IN CSV n'est PAS une partie du code, je viens juste de poster ce qui a été echo dans le fichier .csv juste pour que vous puissiez le voir).

(pas assez réputation pour poster des captures d'écran ...) (http://i.imgur.com/dIFeBJz.png)

Alors oui, j'ont des caractères différents dans le programme, dans le terminal et également dans le fichier de sortie. Maintenant, je ne sais pas quoi faire avec des caractères spéciaux avec des accents. Optimal serait une seule ligne de code qui les supprime tous de la chaîne, pas besoin de remplacer.

Quelque chose comme:

set filename=%filename:À à Ä ä Â â É é È è Ë ë Ê ê Ì ì Ï ï Î î Ò ò Ö ö Ô ô Ù ù Ü ü Û û=% 

Ce serait tout simplement les tuer tous, et je entrée de la ligne avant de prendre la sortie dans le fichier .csv. Résoudrait le problème mais je ne peux pas obtenir cette fonction dans BATCH (j'ai vu des solutions dans .NET ou d'autres langages mais aucun dans BATCH)

+0

Votre fichier de commandes est sauvegardé en UTF8 ... L'invite de commande rencontre des problèmes avec les fichiers de traitement par lots UTF8. Vous pouvez essayer avec un script Powershell. – xanatos

Répondre

0

Le traitement par lots peut gérer n'importe quel caractère Ascii, c.-à-d. avec le code ci-dessous ou égal à 255. Ceci est évident, car le code Batch lui-même doit également être écrit en Ascii.

@echo off 
set remove=áéíóúÜü 
set string=Aaá Eeé Iií Ooó UuÜüú It Works! 
for /F "tokens=1-26 delims=%remove%" %%a in ("%string%") do (
    set newString=%%a%%b%%c%%d%%e%%f%%g%%h%%i%%j%%k%%l%%m%%n%%o%%p%%q%%r%%s%%t%%u%%v%%w%%x%%y%%z 
) 
echo "%newString%" 

Sortie:

"Aa Ee Ii Oo Uu It Works!" 

Si les caractères que vous souhaitez supprimer sont pas Ascii (codes ci-dessus 255), puis un programme batch ne peut pas résoudre ce problème.

+0

D'abord; Fonctionne comme un charme Merci. Deuxièmement, je me demandais seulement si les jetons pouvaient aller au-delà de 26. Parce que oui, quand nous recevons des fichiers de pays lointains, il y a vraiment des tonnes de caractères spéciaux à couper ...: x – Quardah

+0

@Quardah n'est pas une bonne solution pour ceux. Utilisez un meilleur langage de script comme python, perl, ruby ​​... ou sinon utilisez VBS ou JS –

Questions connexes