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

use*_*658 0 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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

小智 5

好的,这就是答案。

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

在我职业生涯的这个阶段......我没有什么可以证明的,我更关心的是避免其他人痛苦和浪费宝贵的编码时间。

这是那些阴险的事情之一,主要是由于微软的自以为是,默认情况下从视图中删除了文件扩展名。...grrr 我今天把我的 Xanax 落在家里了。

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

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

c:\temp\myscript.sql。TXT

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