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