2009-05-12 10 views
55

Ho alcuni file batch che utilizzo per automatizzare il processo di creazione e ricarica dei database di sviluppo. Ha senso creare e mantenere questi file batch in Visual Studio (ad esempio, in un progetto VS Database). Sembrano abbastanza semplici, come questo:Visual Studio inserisce caratteri non validi nei file batch

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

Il problema è che quando li corro, questo è l'output:

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. 

In altre parole, Visual Studio è in qualche modo invisibile l'inserimento di una serie di caratteri che il processore dei comandi di Windows sta interpretando come un comando, cioè "∩╗┐". Una ricerca su Google non ha restituito nulla su questo. Qualcun altro si imbatte in questo? Pensieri su una correzione?

Ho una soluzione (basta aggiungere una riga vuota all'inizio di ogni file, e mostrerà l'errore, ma per il resto funziona bene), ma il lato anale-ritentivo di me stesso si infastidisce ogni volta che eseguire uno di questi file.

risposta

47

Quello che sta accadendo è che VisualStudio è essere intelligente e si nasconde il fatto che il file batch è stato salvato in una codifica dei caratteri non-ASCII (ad esempio, il file è UTF-8 o qualche altra codifica non ASCII) .

Il mio team di progetto è stato preso alcune volte da questo (se i file sono archiviati in CVS rende i file un disastro).

Tendo ad usare Notepad ++, guarda la codifica in basso a destra (dovrebbe dire che è ANSI), se devi cambiarlo vai al menu formato e cambia il tipo quindi salva.

Visual Studio dovrebbe apparire identico ma la dimensione del file dovrebbe essere dimezzata!

+0

Nota: La codifica si chiama UTF-8, non UTC-8 – Joey

+0

@Johannes, grazie per averlo indicato, l'ho corretto. –

+1

Grazie - Notepad ++ era il consiglio giusto. Strano che Visual Studio e cmd.exe non lavorino insieme su qualcosa di base come un file di testo. Huh. –

75

Ray è corretto quando dice che il formato predefinito di Visual Studio per il testo è qualcosa come UTF-8. Anche se Notepad ++ è un ottimo strumento e lo utilizzo personalmente, esiste un'alternativa in cui è possibile indicare a Visual Studio di memorizzare il file di testo in formato ASCII:

In VS2008, selezionare il file in Solution Explorer e selezionare File. .. Salva myfile.bat As ...

Sulla freccia giù sul pulsante Salva, selezionare Salva con codifica.

Quando si salva nella finestra di dialogo Opzioni di salvataggio avanzate, selezionare US-ASCII nell'elenco a discesa Codifica. Imposta le terminazioni di linea come richiesto, o lascialo come impostazione corrente.

+0

Questo è utile, grazie. –

+0

Grazie per il mio primo distintivo, felice di essere al servizio. – jadusty

+0

questo mi ha fatto incazzare per alcuni mesi. e la risposta era qui per tutto il tempo ... –

11

Un altro modo per correggere questo dall'interno di Visual Studio è ...

  1. Fare clic destro sul file in Esplora soluzioni e selezionare 'Apri con'
  2. Scegliere una delle "... con la codifica" opzioni
  3. scegliere US-ASCII dalla lista codifiche
  4. Salvare il file

Ora dovrebbe ritenere che codifica selezionata quando mai lo apri

0

Mentre questo è stato utile nella mia ricerca per risolvere il problema in Visual Basic, la soluzione è quella di dire a VB di utilizzare la codifica ASCII come illustrato di seguito:

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