2011-07-28 17 views
1

これは動作します:パスにスペースが含まれているときにexeを実行すると問題が発生します。

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%の前には下向きのチックがありますが、少なくともIE6ではそれが見えないのかどうかはわかりません。はい、6!

+2

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

はそれが=を役に立てば幸い% ' – jeb

+2

[バッチファイル:パスに空白があると、FOR/Fは機能しません](http://stackoverflow.com/questions/6474738/batch-file-for-f-doesnt-work-if-path)の重複-has-spaces) –

+0

はい、あなたのコールトリックが私に根本的な問題を調べるように促しました – jeb

答えて

1

私はチルダパス(W/Oスペース)へのパスを変更するにはどうすればよい

私はsqlcmd.exeがインストールされていないとして、私は別の例を使用します。例えば、このために参照してください:

C:\temp>envtest 
C:\Program Files\Internet Explorer\Connection Wizard\icwconn2.exe 
C:\PROGRA~1\INTERN~1\CONNEC~1\icwconn2.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% 

実行]を、出力されます。

0

あなたは文字列で動作するように引用符を使用する必要があります...しかし、あなたは、等号の隣のスペースを使用したことがありません:あなたは `コール%のsqlcmdexeを使用することができ

関連する問題