39

When executing certain files (mainly batch) using PsExec I get these weird ́╗┐' symbols before my command. My initial thought was, that I were using wrong encoding, but after checking, I realized that all my files were using UTF-8.

3
  • Why not convert them to UTF-16LE instead? May 29, 2013 at 14:54
  • What's the difference?
    – user187509
    May 29, 2013 at 14:56
  • The difference is that Windows doesn't usually use UTF-8. May 29, 2013 at 15:41

6 Answers 6

44

I get these weird ́╗┐' symbols before my command […] all my files were using UTF-8.

This has two causes:

  1. cmd.exe does not support UTF-8. It always uses one of the single-byte encodings often called "OEM" – cp437, cp775, and so on, depending on the system's regional settings.

    (I expected it to support UTF-16 as well, but apparently not; not even if I added the UTF-16 BOM.)

  2. Your text editor is adding an UTF-8 "byte order mark" (bytes EF BB BF) to the beginning of all UTF-8 files.

    When cmd.exe reads your script, it doesn't know what to do with the mark – it sees the BOM as three ordinary cp437 characters, , and attempts to use them as part of the command name.

Configure your editor to stop adding the BOM to UTF-8–encoded files. (It only makes sense in UTF-16, and is very useless in UTF-8.)

Would compiling the batch files into an exe solve the issue?

uh

what

2
  • 3
    I wouldn't say BOMs are "very useless" in UTF-8; though they are in this particular case. Many applications use them to determine the text actually is UTF-8 and not another encoding. May 29, 2013 at 15:09
  • You can compile batch files to exe using a built in windows command called iexpress.exe (superuser.com/questions/868340/…)
    – Chris Rudd
    Mar 10, 2021 at 0:07
29

To further @dsolimano's answer, if you are specifically using Visual Studio, and in my case it's 2013, I fixed it by doing the following:

  1. Open Visual Studio.
  2. Click Tools > Options.
  3. Click Text Editor > File Extension.
  4. In the Extension box, enter bat.
  5. In the Editor drop down, select Source Code (Text) Editor With Encoding and click Add.
  6. Click OK to save and exit.

Now, when you open a .bat file from within Visual Studio, you will initially get prompted with:

enter image description here

You will want to drill down through the options until you come to the DOS option of your language:

enter image description here

Click OK to finish opening the file.


Ok, even though it should be fairly obvious at this point, if you can see the  characters at the beginning of your file, it would behoove you to remove them and save the file, now with the correct encoding. This is what prevents you from being prompted again next time.


With all of that in place, you will be glad to know that you may now view, edit, and save your .bat file(s) from within Visual Studio so that cmd.exe no longer gives you the aforementioned heinous error of:

'' is not recognized as an internal or external command, operable program or batch file.

3
  • 3
    This fix works in VS2017 perfectly too Jun 19, 2018 at 20:25
  • 5
    I never would have guessed this. Still a valid solution for VS2019.
    – hbulens
    Nov 28, 2019 at 14:26
  • Makes perfect sense that Microsoft's premier developer tool wouldn't be configured out-of-the-box for editing Microsoft's cmd scripts.
    – MgSam
    Oct 26, 2021 at 18:10
12

Those are Unicode Byte Order Marks. Cmd.exe doesn't understand them. If you resave your files in Notepad with ANSI encoding, that should fix the problem.

For example, I created this batch file:

echo Hello World

First I save it with UTF-8 encoding

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
'echo' is not recognized as an internal or external command,
operable program or batch file.

Then with Unicode

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>■e
'■e' is not recognized as an internal or external command,
operable program or batch file.

And finally with ANSI

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World
6

As explained earlier, this character is the unicode character BOM (Byte Order Mark) used as a signature and that cmd.exe does not recognize.

You can delete it safely in many ways.

I've found very easy to do as follows:

  1. open the file in Notepad++
  2. go to Encoding menu
  3. tick the option: Encode in UTF-8 without BOM
  4. Save, and that's it.
1

In Intellij: In the right bottom corner click UTF-8 -> Remove BOM screenshot

1
  • As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.
    – Community Bot
    Jan 7, 2023 at 10:27
0

Simple solution in Windows 10.

Create New.txt file with right click command in file explorer window.

Rename it to New.bat (now it is just data format, not text format for Notepad).

Just open and edit it with Notepad.exe. Now it is UTF-8 format without BOM.

2

You must log in to answer this question.