我已经搜索了这个问题的解决方案,但到目前为止已经空白了。我是批处理脚本的新手,所以如果这是一个愚蠢的问题,请道歉。
我在.txt文件中有一个sql文件名列表,我想将它合并到一个sql脚本中。 .txt文件和.bat文件位于根位置的一个子目录中,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
答案 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
循环可以完美地满足我的需要。