web-dev-qa-db-fra.com

Visual Studio insère des caractères non valides dans des fichiers de commandes.

J'ai quelques fichiers batch que j'utilise pour automatiser le processus de création et de rechargement de bases de données de développement. Il est judicieux de créer et de gérer ces fichiers de commandes dans Visual Studio (c’est-à-dire dans un projet de base de données VS). Ils ont l'air assez simple, comme ceci:

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

Le problème est que lorsque je les lance, voici le résultat:

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.

En d'autres termes, Visual Studio est en train d'insérer de manière invisible une série de caractères que le processeur de commande Windows interprète comme une commande, c'est-à-dire "∩╗┐". Une recherche sur Google n'a rien donné à ce sujet. Est-ce que quelqu'un d'autre a couru dans ça? Pensées sur un correctif?

J'ai une solution de contournement (il suffit d'ajouter une ligne vierge au début de chaque fichier et cela montrera l'erreur, mais sinon ça ira), mais le côté rétention anale de moi-même s'énerve à chaque fois que je lance l'un de ces des dossiers.

62
Ken Smith

Ce qui se passe, c’est que VisualStudio est intelligent et vous cache le fait que votre fichier de commandes a été enregistré dans un codage de caractères non ASCII (par exemple, votre fichier est au format UTF-8 ou un autre codage non ASCII).

Mon équipe de projet a été prise au piège plusieurs fois (si les fichiers sont archivés dans CVS, les fichiers deviennent un gâchis). 

J'ai tendance à utiliser Notepad ++, regardez l'encodage en bas à droite (ça devrait dire que c'est ANSI), si vous avez besoin de le changer, allez dans le menu format et changez le type puis sauvegardez.

Visual Studio doit sembler identique mais la taille du fichier doit avoir été divisée par deux!

50
Ray Hayes

Ray a raison lorsqu'il dit que le format de texte par défaut de Visual Studio ressemble à UTF-8. Bien que Notepad ++ soit un excellent outil et que je l'utilise moi-même, il existe une alternative: vous pouvez indiquer à Visual Studio de stocker votre fichier texte au format ASCII:

Dans VS2008, sélectionnez votre fichier dans l'explorateur de solutions, puis choisissez Fichier ... Enregistrer monfichier.bat sous ...

Sur la flèche vers le bas du bouton Enregistrer, choisissez Enregistrer avec codage.

Lorsque vous enregistrez dans la boîte de dialogue Options d'enregistrement avancées, choisissez US-ASCII dans la liste déroulante Codage. Définissez les fins de ligne comme vous le souhaitez ou laissez-le comme paramètre actuel.

77
jadusty

Une autre façon de corriger cela depuis Visual Studio est ...

  1. Cliquez avec le bouton droit sur le fichier dans l'explorateur de solutions et sélectionnez "Ouvrir avec".
  2. Choisissez l'une des options "... avec codage"
  3. Choisissez US-ASCII dans la liste des encodages
  4. Sauvegarder le fichier

Maintenant, il devrait conserver le codage sélectionné chaque fois que vous l'ouvrez.

12
StingyJack

Bien que cela ait été utile dans ma quête pour résoudre le problème dans Visual Basic, la solution consiste à indiquer à VB d'utiliser le codage ASCII comme indiqué ci-dessous:

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