Как передать несколько параметров в командный файл? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть 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 голосов
/ 23 октября 2018

Я понятия не имею, как использовать инструмент, и никогда не читал справку / информацию об использовании, поэтому это только предположение:

@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
0 голосов
/ 23 октября 2018

Я предполагаю, что все папки находятся на одном уровне.Вы можете получить список папок с помощью команды 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"
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...