【问题标题】:How do I pass multiple parameters to a batch file?如何将多个参数传递给批处理文件?
【发布时间】:2018-10-23 18:42:02
【问题描述】:

我有 1 个批处理文件。我有 5 个数据文件,它们位于 5 个不同的文件夹中。数据结构相同:列数相同,文件名相同但内容不同。如何将多个参数传递给批处理文件?这是一个为 1 个文件夹加载数据的示例。如何处理位于其他 4 个文件夹(Folder2….Folder5)中的数据?拜托我需要你的帮忙。

@echo off
for %%F in ("C:\Temp\Folder1\*.txt") do (
sqlldr USERID=xyz/xyz@db CONTROL='C:\Temp\Folder1\TEST.ctl' 
LOG='C:\Temp\Folder1\TEST.log' "DATA=%%F"
goto AfterLoop
)
:AfterLoop

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    我假设这些文件夹都在同一级别。您可以使用FOR /D 命令获取文件夹列表。

    FOR /D %%G IN (C:\temp\*) DO ...
    

    然后你可以将它用作你内部FOR 命令的一部分:

    FOR %%F IN ("%%G\*.txt") do ....
    

    所以如果你把它们放在一起,它会看起来像这样。

    @echo off
    FOR /D %%G IN (C:\temp\*) DO (
        for %%F in ("%%G\*.txt") do (
            sqlldr USERID=xyz/xyz@db CONTROL='%%G\TEST.ctl' LOG='%%G\TEST.log' "DATA=%%F"
        )
    )
    

    【讨论】:

      【解决方案2】:

      我不知道如何使用该工具,也从未阅读过帮助/使用信息,所以这只是一个假设:

      @Echo Off
      For %%A In (1 2 3 4 5) Do (
          PushD "C:\Temp\Folder%%A"
          SQLLdr USERID=xyz/xyz@db CONTROL=TEST LOG=TEST DATA=*.txt
          PopD
      )
      
      :AfterLoop
      

      如果DATA 不接受通配符,那么添加一个嵌套循环可能会做到这一点:

      @Echo Off
      For %%A In (1 2 3 4 5) Do (
          PushD "C:\Temp\Folder%%A"
          For %%B In (*.txt) Do (
              SQLLdr USERID=xyz/xyz@db CONTROL=TEST LOG=TEST DATA='%%B'
          )
          PopD
      )
      
      :AfterLoop
      

      当然,因为您现在几乎可以保证告诉我们文件夹名称不准确,您可以进行类似的调整:

      @Echo Off
      For %%A In (
          "C:\Temp\Folder1"
          "C:\Temp\Folder2"
          "C:\Temp\Folder3"
          "C:\Temp\Folder4"
          "C:\Temp\Folder5"
      ) Do (
          PushD "%%A"
          SQLLdr USERID=xyz/xyz@db CONTROL=TEST LOG=TEST DATA=*.txt
          PopD
      )
      
      :AfterLoop
      

      或者:

      @Echo Off
      For %%A In (
          "C:\Temp\Folder1"
          "C:\Temp\Folder2"
          "C:\Temp\Folder3"
          "C:\Temp\Folder4"
          "C:\Temp\Folder5"
      ) Do (
          PushD "%%A"
          For %%B In (*.txt) Do (
              SQLLdr USERID=xyz/xyz@db CONTROL=TEST LOG=TEST DATA='%%B'
          )
          PopD
      )
      
      :AfterLoop
      

      【讨论】:

      • 感谢您的快速回复。它非常有用。是的,这些文件夹都在同一级别。 Folder1 ... .to folder5 只是一个例子,但文件夹的真实名称是 SV.DE、DS、DA 和 DF。我以 5 个文件为例,但实际上我每天得到 44 个数据源,所以我创建了 44 个文件夹。第一个示例将接近我正在寻找的内容。我还没有尝试过,但我会让你知道结果。再次感谢
      猜你喜欢
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2014-03-08
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多