2017-06-06 258 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 
)