Caractères spéciaux dans un .bat [Résolu/Fermé]

- - Dernière réponse :  szoixjza - 24 oct. 2017 à 10:20
Bonjour,

Alors voila, Je voudrai renommer des fichiers en mp3 avec une la commande "rename" de dos. Comme je dois en renommer environ 150, je me suis dit que je pourrai me faire un ".bat" contenant des lignes du genre:

[contenu du .bat]

rename "a.mp3" "a Nº86.mp3"

[fin du .bat]

Seulement voila, cet idiot n'arrive pas à prendre correctement en charge le caractère "º" (qui correspond au ALT + 167 pour la table ACSII 2). A la place, j'obtient un horrible caractère carré et blanc.

Le plus curieux, c'est que quand je tape la même chose dans l'invite de commande, sa fonctionne à merveille! Le caractère s'affiche normalement dans le nom du fichier renommé.


Comment faire?
Afficher la suite 

20 réponses

Meilleure réponse
26
Merci
Pour information : le problème original vient du fait que la console MS-DOS (ou cmd, si vous voulez) utilise la table de caractères ASCII simple, alors que Windows utilise une table de caractères étendue (ANSI) légèrement différente.
Les 128 premiers caractères sont strictement identiques en ASCII et ANSI, ceux qui changent d'une table à l'autre sont de code ASCII ou ANSI > 128.

Quand tu utilises l'éditeur "edit" dans une console MS-DOS, tu forces simplement l'écriture de ton batch en utilisant la table ASCII, qui est celle utilisée par la console MS-DOS.
C'est aussi pour cette raison que cela fonctionne quand on tape le caractère dans la console DOS et qu'on le recopie dans le batch sous un éditeur Windows.

L'autre solution, pour afficher un caractère particulier dans un éditeur sous Windows (bloc-notes, Notepad++, Editpad, Ultra-Edit, etc...), est de taper :
- Alt + <code ASCII>
- Alt + 0<code ANSI>

(garder Alt enfoncé et, en même temps, taper le code du caractère).
IMPORTANT : le code ASCII ou ANSI doit être tapé sur le pavé numérique impérativement.

Pour un caractère destiné au MS-DOS, on utilise le code ASCII seul (sur 3 chiffres).
Pour différencier les caractères ANSI par rapport à ASCII, on ajoute un zéro (chiffre 0) devant le code ANSI (lui aussi sur 3 chiffres).

Dire « Merci » 26

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65465 internautes nous ont dit merci ce mois-ci

Fonx2
Messages postés
349
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2013
124 -
Merci pour cette précision qui permet de mieux comprendre la problématique.
Réponse très claire et qui vient compléter les infos déjà présente dans la discution!
Je met +1

Merci encore!
14
Merci
Pour taper < ou > ,il faut mettre ^ devant !

echo TemplateTag=^<!-- TABLE1 --^>
4
Merci
@Blaster :
Le problème vient de ce que "<" et ">" sont des indicateurs de redirection ("<" lecture depuis un fichier, ">" écriture vers un fichier, ">>" écriture par ajout en fin de fichier).
Pour ajouter des caractères "<" ou ">" dans une commande echo, tu dois empêcher DOS de les interpréter comme des ordres de redirection.

Une solution est d'utiliser une lecture de chaîne via un FOR.
Dans ton cas de echo TemplateTag=<!-- TABLE1 --> , on peut écrire :

for /f "delims=; tokens=1,2" %a in ("<;>") do echo TemplateTag=%a!-- TABLE1 --%b

On utilise la lecture de la chaîne "<;>" découpée en deux items (option tokens=1,2) qui sont séparés par le point-virgule (option delims=;) et utilisés via les deux variables %a et %b.

Note : dans un batch, tu dois utiliser les variables avec un double % : %%a et %%b.
@karirovax :
Bien vu. Il est vrai que le ^ est le caractère dévalidateur en DOS, alors que c'est couramment le \ dans d'autres shells (tels Unix / Linux, mais aussi VMS, etc...)

Le ^ comme dévalidateur fonctionne aussi pour insérer un ^ :
echo afficher un accent circonflexe ^^
afficher un accent circonflexe ^
Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1099 -
"dévalidateur" original... En général, on dit "caractère d'échappement"
@Char Snipeur : tu as raison, on dit "caractère d'échappement" quand on est informaticien professionnel ou, à tout le moins, amateur éclairé. Mais ce forum étant susceptible d'être lu par des novices, l'expression "dévalidateur" m'a semblé plus claire et plus explicite.
Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1099 -
Comme on dit, l'enfer est pavé de bonnes intentions. Mieux vaut utiliser le terme juste (sinon, on peu faire un dictionnaire débutant <-> confirmé, où on expliquera qu'un CD doit se dire "galette" pour être plus clair, etc.) et éventuellement l'expliquer.
C'est un peu comme les bébés, il faut leur parler normalement et éviter les : "hum, miam miam le bon lolo."
Je ne vois aucune logique dans ton terme.
Six ans après ça fait autant rire hahaha
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1099
2
Merci
salut
as tu essayer edit alors (c'est l'éditeur MS DOS de base) ?
Un des meilleurs éditeur, d'après ce que j'ai entendu dire, c'est notepad++, essai avec.
Sinon, une idée m'est venu, tu peux essayer de trouver le caractère de l'éditeur qui correspond au '°' dans le shell.
tente :
echo "°">carac_deg.txt
sinon, ecris tout les caractère de 127 à 255 dans ton éditeur est regarde ce que ça donne dans ta console.
Chez moi, le code caractère de '°' est 248 dans la console. Utilise ce petit programme si tu veux savoir :
#include <stdio.h>
int main()
    {
    for(int i=0;i<256;i++)
        {
        printf("%d\t%c\n",i,(unsigned char)i);
        }
    scanf(" ");
    return 0;
    }
2
Merci
DESOLER POUR CETTE LONGUE ABSENCE!!!

J'avoue que j'ai été un peu déborder ses derniés tps. Dsl.
Je viens d'essayé la commande "edit" dans MS-DOS. Effectivement! C'est géant! Et surtout, SA MARCHE!!

Et oui, je le confirme, en écrivant mon .bat avec l'éditeur de texte répondant à la commande "edit" de MS-DOS, le caractère s'affiche correctement dans l'explorateur windows.

Par curiosité, j'ai ouvert le .bat ainsi générer avec le bloc-note windows et à la place du "°", apparraît un curieux petit symbole. Conclusion: les deux programme n'utilise pas la même table de caractère. C'est de cette incohérance que vient mon problème.

Un grand merçi donc à tous ceux qui ont daigné me répondre sur cette discution et tout particuliairement à "Char Snipeur" qui a trouver cette merveilleuse solution!! Gloire à lui!!!


Maintenant, si quelqu'un peut me dire comment je fais pour indiquer que la question est résolut car comme je n'étais pas encore membre jusqu'à présent je ne sais pas comment faire. Merci d'avance!

@@++
2
Merci
Oui effectivement, merci pour la correction. :)
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1099
1
Merci
Salut.
Il existe plein de petit logiciel gratuit permettant de renommer en masse les fichiers.
Je pense que ton problème viens de l'éditeur : pour peu qu'il n'utilise pas le même "standard" que le cmd pour encoder les caractères, et tu es embéter.
mon conseil si tu persiste dans cette voie, change d'éditeur pour un qui te permet de choisir l'encodage de tes caractères. Je n'en ai malheuresement pas à te conseiller. Mais essai peut être edit (cmd->edit) qui étant fait pour ça code peut être dans le bon mode
1
Merci
J'ai aussi testé la deuxième proposition mais sa ne donne rien. Le ".bat" s'exécute puis se ferme aussitôt sans autre protestation.
C'était censé faire quoi au juste??

J'ai essayé de mettre "pause" à la fin pour l'obliger à me montré ses activités mais c'est sans effet! (comme pissé dans un violon ou donner un coup de marteau dans un seau de caca!!!)

Rummm!

Enfin, voila quoi. Sans résultat concret donc.

Désolé!

@++!
1
Merci
salut,
je sais que c'est un peu tard mais sa pourra toujours servir a d'autres personnes...
moi j'ai eu le meme probleme avec plusieurs caracteres j'ai fait un ptit programme pour trouver le caractere correspondant dans la console.

@echo off
echo €a s'utilise des caractSres accentu' en Batch ;).
set /p test=Veuillez saisir des carractSres accentu's :
echo %test%
echo %test% >> "C:\Users\%USERNAME%\Desktop\testaccent.txt"
%homedrive%
pause
cls
pause


sa créé un petit fichier text avec le caractere mais en "format console" et après ya plus qu'a faire un copier coller et c'est partit sa marche avec la plupart des caracteres spéciaux mais j'ai juste eu un probleme avec le "ü" sa passe pas je sais pas pourquoi?? mais si quelqu'un a la solution sa m'aiderai vraiment.
et si tu veux mettre le caractére < ou > ?
j'utilise un script qui fait :
(
echo [DataTransferFromAS400]
echo Version=1.0
echo [HostInfo]
echo HostName=iseries.logidis
echo HostFile=BIBFILQRY/FIL_BLOC
echo [ClientInfo]
echo TemplateTag=<!-- TABLE1 -->
) >> test.dtf

mais ça ne fonctionne pas
Messages postés
100
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
22 avril 2015
29
0
Merci
bonjour,

as-tu essayer de proteger ton caractère pas un / (ou \ je ne me souvient plus) ?
Messages postés
813
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 octobre 2019
110
0
Merci
Salut,

Sous vista cela marche sans probleme et sans mettre ni \ ou /.
Si vous n'êtes pas oubligés d'utiliser le .bat, faites comme Char Snipeur a dit. Sinon, installez le PowerShell il est gratuit et plus puissant q'un shell dos simple.
0
Merci
Tout d'abord, merci à tous pour vos multiple réponses toutes très interressante.

Effectivement, je pense qu'il s'agit d'un problème de standard. Je ne sais pas ce qu'est la commande "edit" mais je vais m'y interresser.

Sinon, oui, je crois que je n'est malheureusement pas le choix: je suis obligée de faire un .bat car le .bat en question doit être utiliser pour renommer les mêmes fichiers mais sur plusieurs postes différents.

En fait, le but est de ne faire le travail qu'une fois pour toutes. Chaque fichier à un nom différent (numérotation puis titre spécifique).
En gros, on a copié sur différentes machine environ 250 fichiers en mp3 mais on a oublié d'en renommer une partie (environ 150). J'ai les fichiers sur mon PC. Je veux donc faire un .bat qui renommera tous les fichiers d'un coup et que je pourrai ensuite envoyé par mail pour renommer également les différente copies disséminés sur les autres PC.

Voila.

J'ajoute que l'obligation d'utiliser un .bat vient du fait que je ne peut utiliser que les programmes de windows XP puisque je ne peut pas installer des applications tiers sur les différents postes (exclu donc l'utilisation d'un petit prog gratuit pour renommé en masse). En fait, si il est possible de créer quelque chose qui me renomme mes multiples fichiers sans avoir recourt à autres choses qu'aux ressources de windows, sa sera bon aussi (je pense par exemple à un .exe).

Merci d'avance pour vos réponses.
Messages postés
1181
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
2 avril 2009
10
0
Merci
Salut
sous 2000 ça fonctionne très bien !
Ne serait ce pas une histoire de table de caractères ?
A+
0
Merci
En effet, il s'agit certainement d'un problème de table de caractère. La question est maintenant: Comment régler ce problème???

Une chose est d'identifier le problème, une autre est de le résoudre !!!

Merci quand même d'avoir essayé sous windows 2000. C'est un petit essai qui peut se révéler fort utile!!

@+++
0
Merci
Oula!! Je n'ai pas tant de connaissance que sa en programmation MS-DOS!! Cependant, je pense avoir à peu près compris ce que tu dit.

En gros, il faut que je trouve le code auquel correspond le caractère désirer dans le "shell" (sauf que je ne sais pas ce que c'est que le shell mais bon c'est pas grave car je supose qu'il s'agit d'une référence contenant, surement entre autre, les différents caractères utilisable).

Si je ne trouve pas ou qu'il n'existe pas, il me faudra alors les définir moi-même via la commande "edit".
Le prob, c'est que je ne connais absolument pas cette commande. Je ne l'ai jamais utilisé de ma vie. Je vais jeter un coup d'oeuil sur internet pour voir ce que je peut trouver sur le sujet (genre un bon tuto!!).

En tout cas, merci beaucoup Char snipeur! T'as vraiment l'air de t'y connaitre et c'est vachement sympa de te pencher sur mon problème.

Sinon, temps qu'on y est, y a t-il aussi moyen de programmer quelque chose pour modifier les informations des morceaux? Je veut parler de ce qu'on peut attribuer comme informations en faisant un clik droit sur le fichier ".mp3", puis propriétés, puis résumer, puis avancé.
Si oui, sa serai vraiment parfait!

Finalement, il devrait y avoir moyen d'utiliser un logiciel tiers même si sa ne m'arange pas car cela me rajouterai alors des étapes.

Merci encore à tous!
0
Merci
Je vient de tester la première ligne, celle qui créer un petit fichier texte nommée "carag_deg.txt". Le résultat est un petit symbole genre "o" barré en diagonale de gauche à droite. Si je met sa, j'sui mal barré!! C'est vraiment dommage mais sa ne marche pas.

Reste à tester la deuxième proposition.

@+++!
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1099
0
Merci
Le shell, c'est MS-DOS, ou cmd, appel ça comme tu veux.
Tu as essayer de copier ton "o" barré dans ton .bat pour voir si ça metait le bon caractère ?
Pour edit, ouvre le DOS, et tape "edit". ça t'ouvre l'éditeur, et essaie de mettre ton code dedans (.bat), peut être qu'il te sortira le bon caractère.
Sinon, utilise ALT+248 à la place de '°' dans ton éditeur.
0
Merci
J'ai essayé le alt+248 mais sa fait pareil.

Pour l'histoire de la commande "edit", je vais essayé.

+ d'info pour demain.

@++!
0
Merci
Bonjour,

pourquoi t'embêter à programmer en DOS.
Utilise Ant Renamer, c'est gratuit, très puissant et simple d'utilisation http://www.antp.be/software/renamer/download/fr

Sinon, si tu veux vraiment faire un script, tu trouveras des infos ici : http://www.batcher.fr/

Bon courage
Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1099 -
L'interet du dos, c'est que tout le monde l'a. Ce qui est pratique pour la distribution.
Messages postés
3225
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
22 juin 2016
167
0
Merci
salut

oui comme piayy dit ou Char Snipeur soit de redériger les caractères spéciaux dans un autre fichier et de faire copier/coller ou à l'aide de la commande edit sous le console Ms-Dos .

karirovax ;)