Visual Studio вставляет недопустимые символы в пакетные файлы

У меня есть несколько командных файлов, которые я использую для автоматизации процесса создания и перезагрузки баз данных разработки. Имеет смысл создавать и поддерживать эти пакетные файлы в Visual Studio (т. Е. В проекте базы данных VS). Выглядят они довольно просто, вот так:

@echo off
echo Setting server and db from defaults.
set SERVERNAME=(LOCAL)
set DB=PLEDGES
echo Creating tables on server %SERVERNAME% and database %DB%
sqlcmd -S %SERVERNAME% -d %DB% -E -i DropAllTables.sql
sqlcmd -S %SERVERNAME% -d %DB% -E -i dbo.UserType.Table.sql
sqlcmd -S %SERVERNAME% -d %DB% -E -i dbo.RegisteredUser.Table.sql
echo Done creating tables.

Проблема в том, что когда я их запускаю, результат получается:

C:\>
'' is not recognized as an internal or external command,
operable program or batch file.
Creating tables on server (LOCAL) and database PLEDGES
Done creating tables.

Другими словами, Visual Studio каким-то образом незримо вставляет набор символов, которые командный процессор Windows интерпретирует как команду, то есть «∩╗┐». Поиск в Google ничего не дал по этому поводу. Кто-нибудь еще сталкивался с этим? Мысли о исправлении?

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


person Ken Smith    schedule 12.05.2009    source источник


Ответы (5)


Что происходит, так это то, что VisualStudio умен и скрывает вас от того факта, что ваш командный файл был сохранен в кодировке символов, отличной от ASCII (например, ваш файл имеет кодировку UTF-8 или другую кодировку, отличную от ASCII).

Моя проектная группа несколько раз попадалась в ловушку этого (если файлы зарегистрированы в CVS, это превращает файлы в беспорядок).

Я обычно использую Notepad ++, посмотрите на кодировку в правом нижнем углу (там должно быть указано, что это ANSI), если вам нужно изменить ее, перейдите в меню формата и измените тип, затем сохраните.

Visual Studio должна выглядеть идентично, но размер файла должен уменьшиться вдвое!

person Ray Hayes    schedule 12.05.2009
comment
Примечание. Кодировка называется UTF-8, а не UTC-8. - person Joey; 13.05.2009
comment
@Johannes, спасибо, что указали на это, я исправил. - person Ray Hayes; 13.05.2009
comment
Спасибо - Notepad ++ был правильным советом. Странно, что Visual Studio и cmd.exe не работают вместе над чем-то столь же простым, как текстовый файл. Хм. - person Ken Smith; 19.05.2009
comment
Проголосовано против - хотя это работает, ответ jadusty удерживает вас в Visual Studio и не требует внешних программ. - person Mark Shapiro; 11.07.2014
comment
@MarkShapiro, мой ответ в основном касался того, «почему», с отступлением о том, «как» это исправить. - person Ray Hayes; 19.07.2014
comment
Интересный факт: эта проблема все еще актуальна почти 11 лет спустя! По крайней мере, поправить несложно ... - person Andrew Arnold; 07.02.2020

Рэй прав, когда говорит, что формат текста Visual Studio по умолчанию - это что-то вроде UTF-8. Хотя Notepad ++ - отличный инструмент, и я использую его сам, есть альтернатива: вы можете указать Visual Studio сохранить текстовый файл в формате ASCII:

В VS2008 выберите свой файл в проводнике решений и выберите Файл ... Сохранить myfile.bat как ...

На стрелке вниз на кнопке Сохранить выберите Сохранить с кодировкой.

При сохранении в диалоговом окне «Дополнительные параметры сохранения» выберите US-ASCII в раскрывающемся списке «Кодировка». Установите окончания строк, как требуется, или оставьте текущую настройку.

person jadusty    schedule 03.06.2009
comment
Спасибо за мой первый значок - рад быть полезным. - person jadusty; 10.06.2009
comment
это бесит меня уже несколько месяцев. и ответ был здесь все время ... - person Tim Coker; 02.11.2010
comment
‹Opinion› Намного лучшее решение, чем управлять пакетными файлами вне VS с помощью стороннего редактора ‹/opinion›. Спасибо за совет. - person joelc; 25.04.2014
comment
Также полезно отметить, что файлы bat можно запускать изнутри Visual Studio, поэтому вам не нужно ни для чего выходить из VS: stackoverflow .com / a / 5606276/1102585 - person Eduardo Wada; 30.04.2015

Другой способ исправить это из Visual Studio - это ...

  1. Щелкните правой кнопкой мыши файл в обозревателе решений и выберите «Открыть с помощью».
  2. Выберите один из вариантов «... с кодировкой»
  3. Выберите US-ASCII из списка кодировок.
  4. Сохраните файл

Теперь он должен сохранять выбранную кодировку всякий раз, когда вы ее открываете.

person StingyJack    schedule 08.07.2015

Хотя это было полезно в моем стремлении решить проблему в Visual Basic, решение состоит в том, чтобы сказать VB использовать кодировку ASCII, как показано ниже:

Try
        outFile = My.Computer.FileSystem.OpenTextFileWriter(myPath, True, System.Text.Encoding.ASCII)
        outFile.WriteLine(macroText)
        outFile.Close()
 Catch ex As Exception
person DJONES    schedule 17.01.2017

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

  1. Щелкните правой кнопкой мыши файл в обозревателе решений и выберите «Открыть с помощью».
  2. Выберите «Двоичный редактор»
  3. Трижды нажмите DEL в открывшемся шестнадцатеричном редакторе и сохраните
person AndyB    schedule 16.05.2020