如何使用批处理将.txt中列出的.sql文件合并到单个.sql脚本中?

时间:2015-08-27 21:49:33

标签: batch-file cmd

我已经搜索了这个问题的解决方案,但到目前为止已经空白了。我是批处理脚本的新手,所以如果这是一个愚蠢的问题,请道歉。

我在.txt文件中有一个sql文件名列表,我想将它合并到一个sql脚本中。 .txt文件和.bat文件位于根位置的一个子目录中,sql脚本位于单独的子目录中,如下所示:

  • 根\
    • 批处理文件
      • .BAT
      • .txt的
    • 视图\
      • 的.sql

我可以非常愉快地读出.txt文件中的文件名,并使用它将它们传递给子程序:

for /f %%d in (IncludeList.txt) do call :Include_List "%%d"
goto :eof

导致我出现问题的部分是:Include_List子程序。我需要能够在views\子目录中搜索每个指定的文件名,然后将其内容复制到新脚本中。

我尝试了下面的内容,我认为它是最接近我工作的,没有它实际工作:

:Include_List
for /r %%f in ('DIR /B /S ..\Views\vw*.sql ^| find /i %~1') do type %%f >> _All_views.sql

似乎将此('DIR /B /S ..\Views\vw*.sql ^| find /i %~1')的每个部分视为文件名,然后无法找到它们中的任何一个。它还检查batch files\目录,而不是views\目录。

另外一个要求是,这是较大批处理文件的一部分,在文件循环并写入新创建的_all_views.sql文件后需要继续处理。

我试图通过批处理文件实现什么?或者我只需要将每个必需的文件手动添加到批处理文件中,如此

type ..\Views\[filename].sql >> _All_views.sql

1 个答案:

答案 0 :(得分:0)

根据wOxxOm的回答,我的最终解决方案如下:

setlocal EnableDelayedExpansion
for /f %%d in (IncludeList.txt) do ( 
 for /f "delims=" %%f in ('DIR /B /S ..\Views\vw*.sql ^| find /i "%%d"') do type %%f >> _All_views.sql
)

我放弃了子程序,因为它放在一个更大的批处理文件中时会引起问题,但是嵌套的for循环可以完美地满足我的需要。