当路径有空格时发出执行exe的问题。

时间:2011-07-28 14:44:51

标签: batch-file sqlcmd

这有效:

SET server=MyServer
SET db=MyDb 

FOR /F "usebackq tokens=1" %%i IN (`sqlcmd -S %server% -d %db% -w200 -h-1 -E -Q "set nocount on; select REPORTING_DATE FROM dbo.CURRENT_REPORTING_DATE"`) DO set REPORTING_DATE=%%i 
ECHO The Reporting Date is %REPORTING_DATE%

但是当我尝试完全限定sqlcmd的路径时......

SET sqlcmdexe="C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" SET server=MyServer SET db=MyDb 

FOR /F "usebackq tokens=1" %%i IN (` %sqlcmdexe% -S %server% -d %db%
-w200 -h-1 -E -Q "set nocount on; select REPORTING_DATE FROM dbo.CURRENT_REPORTING_DATE"`) DO set REPORTING_DATE=%%i  ECHO The Reporting Date is %REPORTING_DATE%

我收到错误:

系统找不到指定的路径。

...大概是因为文件夹名称中的空格。

如何更改波浪路径(没有空格)或更好的路径,引用它以便正确执行此语句?

请注意,在%sqlcmdexe%之前有一个向后的tic,不知道为什么我没有看到它,至少在IE6中。是的,6!

2 个答案:

答案 0 :(得分:2)

如何更改波浪路径的路径(无空格)

由于我没有安装sqlcmd.exe,我使用了另一个例子。例如,见:

@echo off
set sqlcmdexe=C:\Program Files\Internet Explorer\Connection Wizard\icwconn2.exe
echo %sqlcmdexe%

for /f "tokens=*" %%a in ("%sqlcmdexe%") do set sqlcmdexe=%%~sa
echo %sqlcmdexe%

在我的系统上运行,输出为:

C:\temp>envtest
C:\Program Files\Internet Explorer\Connection Wizard\icwconn2.exe
C:\PROGRA~1\INTERN~1\CONNEC~1\icwconn2.exe

但我不知道这是否能解决你的问题。

答案 1 :(得分:0)

你必须使用引号来处理字符串...但你从来没有在等号旁边使用空格:

set "sqlcmdexe=c:\Program Files\Internet Explorer\Connection Wizard\icwconn2.exe"
echo.%sqlcmdexe%

希望有帮助=)