批处理文件中的SQLCMD错误。无效的文件名

时间:2014-05-07 15:27:28

标签: sql batch-file sqlcmd

    echo off
if "%4" == "" goto usage
cd %3
mkdir Logs
echo Logs can be found in %3\Logs
echo 
goto %4

:smmdsp

echo Updating %2..xyz table on %1
sqlcmd -S %1 -E -p -e -d %2 -i "%3\xyz.SQL" > %3\Logs\xyz.SQL.log
goto done

:usage
echo.
echo Usage
echo.
echo where SqlServer = SQL Server name
echo       Database = configuration database
echo       InstallPath = path to the software update files
echo       Feature = Feature to update 
echo.
:done

如果我在C盘C:\ XYZ中有批处理文件,但是如果路径中有空格或者它在程序文件86文件夹C:\ Program Files(x86)中,则此脚本有效。它会产生错误那说

enter image description here

如何处理这种情况......?谢谢

2 个答案:

答案 0 :(得分:0)

尝试使用字符串:

sqlcmd -S "%1" -E -p -e -d %2 -i "%3\xyz.SQL" > %3\Logs\xyz.SQL.log

答案 1 :(得分:0)

好的,这就是答案。

在我作为专业程序员的数十年经验中,我了解到大多数不容易解决的错误并不困难,因为问题本身很难,但由于人性,我们对代码的元素做出假设。是完全错误的,但我们不能因为天生的假设而“看到”它。为了使我们自己行为中的错误更加复杂,一旦我们在思考过程中发现错误,我们就会过于尴尬地告诉别人问题的根源是什么。

在我的职业生涯的这一点......我没有什么可以证明的,而且更关心的是拯救他人痛苦和浪费宝贵的编码时间。

这是主要由于微软放肆而且默认情况下从视图中删除文件扩展名的那些潜在的事情之一。 ...今天我把我的xanax留在了家里。

我在这里做了什么,我假设我试图用作sqlcmd调用的参数的文件名是... -i c:\ temp \ myscript.sql

我完全错了。我试图引用的文件是

c:\ temp \ myscript.sql。 txt

但是微软试图帮助我我从文件浏览器的视图中删除了实际的扩展,并欺骗我以为我有正确的文件名。我没有。一旦我意识到我更正了文件名,然后使我的代码引用正确,一切都运行良好。