2014-05-07 110 views
0
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).It给出了,说批处理文件中的SQLCMD错误。无效的文件名

enter image description here

如何处理这种情况下一个错误...?谢谢

回答

0

尝试用字符串:

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

OK,这就是答案。

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

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

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

我在这里做,我的假设,我是想作为参数传递给SQLCMD通话使用的文件名是...... -ic:\ TEMP \ myscript.sql

,我是完全错误。我试图参考的文件是

c:\ temp \ myscript.sql。 TXT

,但微软在他们的企图,试图帮助我删除从视图文件浏览器实际的延伸和愚弄我陷入思考,我有正确的文件名。我没有。一旦我意识到我更正了文件名,这使得我的代码引用正确,并且一切都很完美。