одновременное выполнение нескольких пакетных команд для каждого файла

#loops #batch-file

#циклы #пакетный файл

Вопрос:

Как мне выполнить несколько пакетных команд для нескольких файлов один за другим. Значение, скажем, если я хочу сначала переместить файл из одной папки в рабочую папку, переименовать файл в формат csv, вызвать скрипт sqlloader, вызвать второй sql-скрипт и, наконец, вызвать другой sql-скрипт — все шаги, описанные выше, должны выполняться не для всех файлов, а для одного файлавремя. Я попробовал что-то вроде этого, как показано ниже, но получение ошибки как » Downloads Validation Prestage * .psa) было неожиданным в это время». Не могу ли я передать подстановочный знак *.psa в критерии цикла?

Большое спасибо и ценю ваше время на это.

     echo off

    :MAIN


    copy C:DownloadsPrevalidation*.psa C:DownloadsValidationPrestage

    FOR %A IN (C:DownloadsValidationPrestage*.psa) DO ( move C:DownloadsValidationPrestage*.psa C:DownloadsValidationWIP
      ren C:DownloadsValidationWIP*.psa *.csv
    <call sqlloader now>
    <call update script now> 
    <call validation script now> 
   )

   exit
 

Спасибо,
Сандерс.

Ответ №1:

Ваша стратегия верна.

Существует одна незначительная синтаксическая ошибка: вам нужно использовать %%A вместо %A FOR команды внутри файла BAT. И затем вам нужно ссылаться на %%A внутри цикла как на имя обрабатываемого файла.

 @echo off
copy C:DownloadsPrevalidation*.psa C:DownloadsValidationPrestage
FOR %%A IN (C:DownloadsValidationPrestage*.psa) DO ( 
  move %%A C:DownloadsValidationWIP%%~nA.psa
  ren C:DownloadsValidationWIP%%~nA.psa *.csv
  <call sqlloader now>
  <call update script now> 
  <call validation script now> 
)
 

Комментарии:

1. PA — спасибо за ваш ответ. Тем не менее, я все еще получаю синтаксическую ошибку при выполнении скрипта. Вот мой сценарий — echo off: ОСНОВНАЯ копия C:DownloadsPrevalidation *.psa C:DownloadsValidationPrestage ДЛЯ %%A В (C:DownloadsValidationPrestage *.psa) СДЕЛАТЬ (переместить %%A C:DownloadsValidationWIP %%~nA.psa рен C:DownloadsValidationWIP %%~Вызов nA.psa psaload.csv C:CAP_SPSBatchscriptsrunloader.bat позвоните C:CAP_SPSBatchscriptsrunupdate.bat позвоните C:CAP_SPSBatchscriptsrunvalidation . bat del C:DownloadsValidationWIPpsaload.csv ) выход

2. @user982201: я бы рекомендовал использовать кавычки вокруг имен в move и ren командах, например move "%%A" "C:DownloadsValidationWIP%%~nA.psa" .

3. @user98822 какая команда не выполняется ?… префикс всех ваших команд с помощью echo и добавьте кавычки вокруг имен файлов.

4. PA — сбой при переименовании файла. Сообщение об ошибке: «Синтаксис команды неверен». И я думаю, что знаю причину этого. Приведенный выше цикл работает не так, как хотелось бы. Он перемещает все файлы * .psa из предварительной папки в папку WIP, а затем программа не понимает, в какой файл переименовать, поскольку я передаю одно имя целевого файла для запуска моего сценария загрузки и других сценариев, следующих за ним. Итак, вернемся к моему первому вопросу — как мне выполнить серию команд для каждого файла, присутствующего в папке, а не для всех сразу?