繁体   English   中英

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

[英]SQLCMD error in Batch file. Invalid Filename

    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) 中。它会给出一个错误,指出

在此处输入图片说明

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

好的,这就是答案。

在我作为专业程序员的几十年经验中,我了解到大多数不容易解决的错误并不难,因为问题本身很困难,但由于人性,我们对代码中的元素做出了完全不正确的假设,但由于这种先天的假设,我们无法“看到”它。 为了在我们自己的行为中加剧这种错误,一旦我们发现我们思维过程中的错误,我们往往会不好意思告诉别人问题的根源是什么。

在我职业生涯的这个阶段......我没有什么需要证明的了,我更关心的是为他人节省宝贵的编码时间的痛苦和浪费。

这是一种阴险的事情,主要是由于 Microsoft 冒昧,默认情况下从视图中删除文件扩展名。 ...grrr 我今天把我的 xanax 留在家里了。

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

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

c:\\temp\\myscript.sql。 文本

但是微软试图帮助我从文件资源管理器的视图中删除实际的扩展名,并欺骗我认为我有正确的文件名。 我没有。 一旦我意识到我更正了文件名,然后我的代码引用就正确了,一切都完美无缺。

尝试使用字符串:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM