2015-11-23 3 views
1

У меня есть небольшой командный файл, и это выглядит следующим образом:пакетный файл не читает флаги правильно

.\batchisp.exe –device at32uc3b1512 –hardware usb –operation erase f memory flash blankcheck loadbuffer G3Pro_USB.hex program verify start reset 0 

Вся линия хорошо и правильно работает, если я запустить его прямо в PowerShell. Однако, если я запустить пакетный файл, он работает следующим образом:

.\batchisp.exe ΓÇôdevice at32uc3b1512 ΓÇôhardware usb ΓÇôoperation erase f memory flash blankcheck loadbuffer G3Pro_USB.hex program verify start reset 0 

Который не работает, потому что, как вы можете видеть, - 's изменились в ΓÇô-х ... Может кто-нибудь сказать мне, почему это есть и как это исправить?

+2

Обычно это имеет какое-то отношение к кодировке, которую вы использовали для сохранения пакетного скрипта, например, вы использовали UTF-8 вместо ANSI или что-то в этом роде. – SomethingDark

ответ

4

Это потому, что знаки не являются - символов. На самом деле это endashes. Обычно они вызваны Word automatic en/emdashing.

Powershell достаточно умен, чтобы преобразовать endashes в тире как «аргументы», но cmd - нет.

Чтобы устранить эту проблему, замените на -. Поиск/замена регулярных выражений, который захватывает все альтернативные типы тире, которые работают в блокноте ++, составляет: [–—‒] до -.

+0

Это имеет смысл, но какое решение? Я использую N ++ и, кажется, интерпретирую его неправильно, независимо от того, какую кодировку я его конвертирую (например, ANSI, UTF-8, UTF-8-BOM, UCS-2 BE BOM и UCS-2 LE BOM). – tarrball

+0

Я отредактировал ответ, чтобы добавить «исправление», чтобы просто заменить все странные штрихи обычным тире. – HighlyUnavailable

Смежные вопросы