我有一個複雜的批處理腳本,涉及多個BCP命令,這些命令用平面文件數據加載SQL服務器。我正在使用將命令的結果記錄到日誌文件中的分支語句。這一切工作正常。將命令結果捕獲到變量中不起作用
結果也會作爲成功或失敗記錄在SQL表中。我試圖做的是,在失敗時,使用我認爲是簡單的重定向的方式將日誌文件的內容插入到SQL日誌表中。它不工作。
以下是我在一個雙贏Server 2012的環境中的批處理文件正在做:
BCP (the parameters here don't matter) >> %LogFile% (
MOVE %FileName% to Archive/%FileName%
sqlcmd -E -Q "EXEC spImportLog 'SUCCESS', %FileName%, ''
) || (
SET /p LogText=<%LogFile%
sqlcmd -E -Q "EXEC spImportLog 'FAILED', %FileName%, %LogText%
)
此代碼的執行沒有錯誤。聲明的真實部分正常工作。 錯誤部分執行正常,但我最終得到空字符串而不是 %LogText%的內容。
當運行此從命令提示,SET看起來像這樣:
SET/P LogText < 0Log_2016_9_23.log
的日誌文件%%是一個變量,因爲它是在運行時動態命名基於今天的日期。我不知道小於號後的0是從哪裏來的,或者它是我問題的根源。有任何想法嗎?
我猜在'BCP'命令行最後一個'('...是'BCP'是一個批處理文件?',如果是'call'前面有'&&' LogText'你需要[延期擴展](http://ss64.com/nt/delayedexpansion.html),因爲你正在修改*和*在相同的代碼塊中讀取該變量... – aschipfl
是的,前面有一個&& (。我用BCP(我的參數)>>%LogFile%&&(true語句)||編輯了我的原始代碼(SET/p LogText = <%LogFile%sqlcmd -E -Q「EXEC spImportLog'FAILED',%FileName%,!LogText!) –
延遲擴展設置在批處理文件的開頭並在結束時停止它。 –