2017-06-06 246 views
-1

卡住了一個運行bcp命令的簡單批處理文件。 我需要這個批處理文件來循環通過包含表名稱的txt文件。批處理文件bcp命令

這裏是我迄今爲止

set hour=%time:~0,2% 
if "%hour:~0,1%" == " " set hour=0%hour:~1,1% 
echo hour=%hour% 
set min=%time:~3,2% 
if "%min:~0,1%" == " " set min=0%min:~1,1% 
echo min=%min% 
set secs=%time:~6,2% 
if "%secs:~0,1%" == " " set secs=0%secs:~1,1% 
echo secs=%secs% 

set year=%date:~-4% 
echo year=%year% 

set dt=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hour%%min%%secs% 
set filename=%1 
bcp TABLE.dbo.%1 OUT C:\temp\%filename%_%dt%.dat -n -T 

我喜歡來自input.txt的文件的1%,可能有50個表名。

謝謝您的幫助

+0

什麼問題?有sql中的循環和替換功能...你可以從.txt讀取表名嗎? –

+0

謝謝你真正有用的評論。如果我可以在SQL中完成,我現在就完成了。 – Steve

回答

2

我不會使用的語言環境/用戶設置相關的日期/時間變量,但 wmic os get LocalDateTime命令,只錯過日期和時間之間的下劃線。

@Echo off 
For /f "delims=." %%A in ('wmic os get LocalDateTime^|find "."') do Set DT=%%A 
for /f "delims=" %%F in (%1) do (
    bcp TABLE.dbo.%%F OUT "C:\temp\%%F_%DT:~0,8%_%DT:~8,6%.dat" -n -T 
) 
1

我想通過一個文本文件中使用for命令循環。請參閱for /?尋求幫助。

假設文件名是input.txt,每行有一個表名。你有myscript.cmd input.txt稱之爲:

set hour=%time:~0,2% 
if "%hour:~0,1%" == " " set hour=0%hour:~1,1% 
echo hour=%hour% 
set min=%time:~3,2% 
if "%min:~0,1%" == " " set min=0%min:~1,1% 
echo min=%min% 
set secs=%time:~6,2% 
if "%secs:~0,1%" == " " set secs=0%secs:~1,1% 
echo secs=%secs% 

set year=%date:~-4% 
echo year=%year% 

set dt=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hour%%min%%secs% 

for /f %%i in (%1) do (
    bcp TABLE.dbo.%%i OUT C:\temp\%%i_%dt%.dat -n -T 
)