Visual Studio wstawia nieprawidłowe znaki w plikach wsadowych

Mam kilka plików wsadowych, których używam do automatyzacji procesu tworzenia i przeładowywania baz danych programistycznych. Warto tworzyć i utrzymywać te pliki wsadowe w Visual Studio (np. w projekcie bazy danych VS). Wyglądają całkiem prosto, tak:

@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.

Problem polega na tym, że gdy je uruchamiam, to jest to wyjście:

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.

Innymi słowy, Visual Studio w jakiś sposób niewidocznie wstawia zestaw znaków, które procesor poleceń systemu Windows interpretuje jako polecenie, czyli"∩ ╗ ┐". Wyszukiwarka Google nic na ten temat nie zwróciła. Czy ktoś jeszcze na to wpadł? Jakieś pomysły na naprawę?

Mam obejście (po prostu dodaj pustą linię na początku każdego pliku, a pokaże błąd, ale poza tym działa dobrze), ale strona analna mnie denerwuje za każdym razem, gdy uruchamiam jeden z tych plików.

Author: Ken Smith, 2009-05-12

4 answers

Dzieje się tak, że VisualStudio jest sprytne i ukrywa cię przed faktem, że plik wsadowy został zapisany w kodowaniu znaków innych niż ASCII (np. Twój plik to UTF-8 lub inne kodowanie inne niż ASCII).

Mój zespół projektowy został złapany przez to kilka razy (jeśli pliki są sprawdzane w CVS to sprawia, że pliki bałagan).

Używam Notepad++, spójrz na kodowanie w prawym dolnym rogu (powinno być napisane, że jest to ANSI), jeśli chcesz to zmienić przejdź do menu Formatuj i zmień typ, a następnie zapisz.

Visual Studio powinno wyglądać identycznie, ale Rozmiar pliku powinien zmniejszyć się o połowę!

 50
Author: Ray Hayes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-13 14:59:06

Ray ma rację, gdy mówi, że domyślny format tekstu w Visual Studio to coś w rodzaju UTF-8. Chociaż Notepad++ jest świetnym narzędziem i sam go używam, istnieje alternatywa w tym, że możesz powiedzieć Visual Studio, aby przechowywał swój plik tekstowy w formacie ASCII:

W VS2008 wybierz swój plik w Eksploratorze rozwiązań i wybierz plik...Zapisz mój plik.bat As...

Na strzałce w dół przycisku Zapisz Wybierz Zapisz z kodowaniem.

Podczas zapisywania w zaawansowanych opcjach zapisu okno dialogowe, Wybierz US-ASCII z listy rozwijanej kodowanie. Ustaw zakończenia linii zgodnie z wymaganiami lub pozostaw je jako bieżące ustawienie.

 76
Author: jadusty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 09:00:19

Innym sposobem na poprawienie tego z poziomu visual studio jest...

  1. Kliknij prawym przyciskiem myszy plik w Eksploratorze rozwiązań i wybierz "Otwórz za pomocą"
  2. Wybierz jeden z "... With Encoding " options
  3. Wybierz US-ASCII z listy kodowań
  4. Zapisz plik

Teraz powinien zachować wybrane kodowanie przy każdym otwarciu.

 12
Author: StingyJack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-08 14:36:56

Chociaż było to przydatne w moim dążeniu do rozwiązania problemu w Visual Basicu, rozwiązaniem jest nakazanie VB używania kodowania ASCII, jak pokazano poniżej:

Try
        outFile = My.Computer.FileSystem.OpenTextFileWriter(myPath, True, System.Text.Encoding.ASCII)
        outFile.WriteLine(macroText)
        outFile.Close()
 Catch ex As Exception
 0
Author: DJONES,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-17 20:49:46