这有效:
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!
答案 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%
希望有帮助=)