2008-10-31 9 views
9

Par exemple, supposons que j'ai un fichier batch appelé 'test.cmd' et il contient simplement:Pourquoi existe-t-il une différence entre l'encodage de l'invite de commandes Windows et un fichier de traitement par lots?

echo %1 

Je peux appeler directement à partir de l'invite de commande avec 'test.cmd some¬arg' et le résultat est que la chaîne 'some¬arg' est imprimée.

Toutefois, si je place le même appel dans un second fichier batch, appelé 'tester.cmd' pour l'argument, et que j'appelle cela à partir de l'invite de commande, le résultat est que la chaîne 'some%arg' est imprimée.

Qu'est-ce qui gâche l'encodage et comment le contourner? Je suis sûr que j'ai réparé cela avant, mais je ne me souviens pas comment ...

Merci!

+1

Etes-vous sûr que c'est un signe de pourcentage? Sur ma machine c'est un "¼". – Tomalak

Répondre

9

Ceci est parce que votre fichier batch est codé dans une page de code différent de cmd.exe est actuellement.

Dans les configurations par défaut occidentales, cmd.exe commence à CP850, mais les éditeurs de texte travaillent habituellement dans CP1252 (ce est souvent appelé à tort Latin-1 ou ISO-8859-1).

Les caractères "¬" et "¼" partagent le même code de caractère dans ces deux pages de code, "BC".

La solution est simple. Encodez votre fichier de commandes dans la page de codes 850 ou passez cmd.exe à la page de codes 1252 en émettant chcp 1252.

+0

Donc, vous suggérez que je peux utiliser chcp 1252 en haut d'un fichier batch et ensuite dans les boucles for, je n'aurais plus besoin d'utiliser le symbole double%? – djangofan

+0

@djangofan Non, pas du tout. Le double '%%' est une exigence du processeur de commande lui-même et n'a rien à voir avec le codage de caractères. – Tomalak

Questions connexes