2016-04-28 91 views
0

我有以下批處理腳本執行包含在多個文件SQL腳本SQL文件,使用批處理腳本SQLCMD工具:執行,什麼也不做

@echo off 
setlocal enabledelayedexpansion 
set /p servername=Enter DB Servername : 
set /p dbname=Enter Database Name : 
set /p spath=Enter Script Path : 
set /p usr=Enter the username : 
set /p pw=Enter the password : 
set hr=%time:~0,2% 
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1% 
set logfilepath= %spath%\output_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%.log 
set cmd='dir "%spath%\*.sql" /b' 
FOR /f "delims=" %%f IN (%cmd%) DO (
    echo ******PROCESSING %%f FILE****** 
    echo ******PROCESSING %%f FILE****** >> %logfilepath% 
    SQLCMD -S%servername% -U%usr% -P%pw% -d%dbname% -s" -i%%f -b >> %logfilepath% 
    IF !ERRORLEVEL! NEQ 0 GOTO :OnError 
) 
GOTO :Success 

當我運行此腳本提示「1>」將等待命令。我可以理解發生了什麼問題。

非常感謝你

回答

2

你正在開始SQLCMD並沒有做你想做的。對於初學者,我會改變這條線

SQLCMD -S%servername% -U%usr% -P%pw% -d%dbname% -s" -i%%f -b >> %logfilepath% 

SQLCMD -S %servername% -U %usr% -P "%pw%" -d%dbname% -s ^" -i "%%f" -b >> "%logfilepath%" 
  1. 不知道是否需要我補充的空間,但更容易的情況下閱讀
  2. 使用引號有毒藥的字符或空格密碼,文件名和路徑
  3. 轉義列分隔符(「)。這可能是導致您的問題的原因。
+0

非常感謝你的解決方案 – zappasan

+1

不客氣。僅供參考,我打算在-d%之後添加一個空格。另外,請注意,在SQLCMD之後檢查錯誤級別對您沒有太大幫助。它僅驗證您是否能夠啓動SQLCMD ...它不會提供有關SQLCMD運行的SQL命令的狀態的任何結果。爲此,您需要解析您將結果指向的日誌文件的內容。 – RGuggisberg