У меня есть 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 ответа
Я понятия не имею, как использовать инструмент, и никогда не читал справочную информацию / информацию об использовании, поэтому это только предположение:
@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
Я предполагаю, что все папки находятся на одном уровне. Вы можете получить список папок с помощью команды 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"
)
)
Новые вопросы
batch-file
Пакетный файл - это текстовый файл, содержащий серию команд, которые выполняются интерпретатором команд в системах MS-DOS, IBM OS / 2 или Microsoft Windows.