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)中,则此脚本有效。它会产生错误那说
如何处理这种情况......?谢谢
答案 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
但是微软试图帮助我我从文件浏览器的视图中删除了实际的扩展,并欺骗我以为我有正确的文件名。我没有。一旦我意识到我更正了文件名,然后使我的代码引用正确,一切都运行良好。