如何将多个参数传递给批处理文件?

时间:2018-10-23 18:42:02

标签: batch-file

我有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

2 个答案:

答案 0 :(得分: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"
    )
)

答案 1 :(得分:0)

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

@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
相关问题