【问题标题】:batch file bcp command批处理文件 bcp 命令
【发布时间】:2017-06-06 15:26:43
【问题描述】:

卡在一个运行 bcp 命令的简单批处理文件中。 我需要这个批处理文件来循环通过一个包含表名的 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%
set filename=%1
bcp TABLE.dbo.%1 OUT C:\temp\%filename%_%dt%.dat -n -T

我喜欢 %1 来自可能有 50 个表名的 input.txt 文件。

感谢您的帮助

【问题讨论】:

  • 有什么问题? sql 中有循环和替换函数...你能从 .txt 中读取表名吗?
  • 感谢您的真正有用的评论。如果我可以在 SQL 中完成它,我现在就完成了。

标签: sql-server batch-file bcp


【解决方案1】:

我不会使用依赖于语言环境/用户设置的日期/时间变量,但是 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
)

【讨论】:

    【解决方案2】:

    我会使用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
    )
    

    【讨论】:

      猜你喜欢
      • 2013-07-05
      • 1970-01-01
      • 2021-08-13
      • 2010-12-23
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      相关资源
      最近更新 更多