You have to save the batch file with OEM encoding. How to do this varies depending on your text editor. The encoding used in that case varies as well. For Western cultures it’s usually CP850.
Batch files and encoding are really two things that don’t particularly like each other. You’ll notice that Unicode is also impossible to use there, unfortunately (even though environment variables handle it fine).
Alternatively, you can set the console to use another codepage:
chcp 1252
should do the trick. At least it worked for me here.
When you do output redirection, such as with dir
, the same rules apply. The console window’s codepage is used. You can use the /u
switch to cmd.exe
to force Unicode output redirection, which causes the resulting files to be in UTF-16.
As for encodings and code pages in cmd.exe
in general, also see this question:
- What encoding/code page is cmd.exe using
EDIT: As for your edit: No, cmd
always assumes the batch file to be written in the console default codepage. However, you can easily include a chcp
at the start of the batch:
chcp 1252>NUL
ren -hélice hélice
To make this more robust when used directly from the commandline, you may want to memorize the old code page and restore it afterwards:
@echo off
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 1252>nul
ren -hélice hélice
chcp %cp%>nul