代码之家  ›  专栏  ›  技术社区  ›  Ken Smith

Visual Studio在批处理文件中插入无效字符

  •  62
  • Ken Smith  · 技术社区  · 15 年前

    我有一些批处理文件,用来帮助自动化创建和重新加载开发数据库的过程。在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命令处理程序解释为命令的字符,即“_谷歌搜索没有返回任何信息。还有人碰过这个吗?想办法解决吗?

    我有一个解决方法(只需在每个文件的开头加一个空行,它将显示错误,但其他方面工作正常),但每次运行这些文件时,我的肛门保持功能都会受到干扰。

    4 回复  |  直到 8 年前
        1
  •  50
  •   Ray Hayes    15 年前

    所发生的是,VisualStudio非常聪明,它可以使您避免将批处理文件保存为非ASCII字符编码(例如,您的文件是UTF-8或其他非ASCII编码)。

    我的项目团队已经被这个问题缠住了几次(如果文件被检入到cvs中,会使文件变得一团糟)。

    我倾向于使用记事本++,看看右下角的编码(应该说它是ANSI),如果需要更改它,请转到“格式”菜单并更改类型,然后保存。

    Visual Studio的外观应该相同,但文件大小应该减半!

        2
  •  77
  •   jadusty    15 年前

    当Ray说Visual Studio的默认文本格式类似于UTF-8时,他是正确的。虽然记事本++是一个很好的工具,我自己也使用它,但还有一种选择,您可以告诉Visual Studio以ASCII格式存储文本文件:

    在VS2008中,在解决方案资源管理器中选择您的文件,然后选择文件…将myfile.bat另存为…

    在“保存”按钮的向下箭头上,选择“用编码保存”。

    在“高级保存选项”对话框中保存时,请在“编码”下拉列表中选择US-ASCII。根据需要设置行尾,或将其保留为当前设置。

        3
  •  12
  •   StingyJack    9 年前

    从Visual Studio中更正此问题的另一种方法是…

    1. 右键单击解决方案资源管理器中的文件,然后选择“打开方式”
    2. 选择“…带编码“选项
    3. 从编码列表中选择US-ASCII
    4. 保存文件

    现在,只要打开它,它就应该保留所选的编码。

        4
  •  0
  •   DJONES    8 年前

    虽然这在我寻求解决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