代码之家  ›  专栏  ›  技术社区  ›  djangofan

为什么在批处理文件中不提示输入允许使用破折号?

  •  0
  • djangofan  · 技术社区  · 15 年前

    我编写了一个简单的小批量文件程序,但是如果输入一个包含“-”字符的数据库名,它就会失败。我不太清楚为什么,但我希望我能找到解决办法?

    :: open DB batch file
    @echo off
    :: starts Sql Server Management Studio Express 2005
    :: and opens it to a specific database with query
    :: window already open
    
    cls
    
    :SHOWDBNAMES
    echo Database names detected on this system:
    echo.
    "%PROGRAMFILES%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -h-1 -S . -E -Q "SELECT CAST(name AS VARCHAR(30)) FROM sysdatabases"
    
    @echo.
    set DBNAME=
    set /P DBNAME=What database name would you like to open (choose from list)? 
    
    if "%DBNAME%" == "" (
      echo.
      echo I don't recognize your selection. Try again.
      goto SELECTDB
    )
    
    :SHOWTABLES
    cls
    echo.
    echo Tables that you can query from %DBNAME% are:
    echo.
    "%PROGRAMFILES%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -h-1 -S . -E -Q "use [%DBNAME%];SELECT CAST(name AS VARCHAR(30)) FROM sys.Tables ORDER BY name"
    echo.
    
    :RUNIT
    sqlwb.exe -nosplash -S . -E -d %DBNAME%
    
    pause
    :EOF
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Ed Harper    15 年前

    尝试将数据库名称括在方括号中:

    [database-name]

    编辑

    以下内容应该有效-您需要在对sqlwb.exe的调用中引用数据库名称:

    :SHOWTABLES
    cls
    echo.
    echo Tables that you can query from %DBNAME% are:
    echo.
    "%PROGRAMFILES%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -h-1 -S . -E -Q "SELECT CAST(name AS VARCHAR(30)) FROM [%DBNAME%].sys.Tables ORDER BY name"
    echo.
    
    :RUNIT
    sqlwb.exe -nosplash -S . -E -d "%DBNAME%"
    

    不过,我得问一下——这个剧本有什么意义?内置的SSMS对象资源管理器免费提供所有这些信息。

    此外,您的脚本不考虑除默认值之外的SQL Server实例-SQL Server Express安装为 <machine_name>\SQLEXPRESS 默认情况下。

        2
  •  0
  •   dewalla    15 年前

    你为什么不试试下划线?

        3
  •  0
  •   zwol    15 年前

    它是不是在 sqlwb.exe 行当破折号是数据库名称中的第一个字母时?如果是这样,你的问题是 sqlwb 错误地将数据库名称解释为命令行选项。应该有办法不这样做;查阅手册。

    推荐文章