Есть ли способ заставить командный файл выполнить три отдельные задачи? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь создать командный файл, выполнив три отдельные задачи: 1) запустить задание Abaqus, 2) извлечь данные из файла .odb и 3) создать рисунок.

I Я могу запустить элементы 1 и 2, но не могу запустить третий элемент в том же пакетном файле. Когда я запускаю его отдельно, он работает. Если у кого-то есть идея, это было бы здорово! Спасибо!

:: 1) Run the Abaqus job
call Abaqus double job=Bond_Test_Script cpus=1 double interactive ask_delete=OFF 
echo on
:: 2) Run the python data extract 
Abaqus python -c "import BpT; BpT.data_extract('Bond_Test_Script')"
echo on
:: 3) Plot the data
call "C:\Users\anaconda3\condabin\activate.bat" 
"C:\Users\anaconda3\python.exe" "F:\Abaqus Working Directory\BpT_Plot.py"
pause
'''

1 Ответ

0 голосов
/ 03 мая 2020

Если он не выполняет шаг 3, то вполне вероятно, что Abaqus сам является пакетным сценарием.

Когда вы запускаете пакетный сценарий из другого пакетного сценария, он не возвращается к исходному если вы не используете вариант call, как на шаге 1.

Это можно увидеть с помощью следующих двух сценариев: сначала first.cmd:

@echo off
echo first a
call second
echo first b
second
echo first c

, а затем second.cmd:

echo second

Выполнение first никогда не попадет на команду, которая повторяет first c, потому что выполнение second без call не вернет:

C:\Users\PaxDiablo> first
first a
second
first b
second

Решение состоит в том, чтобы изменить ваш шаг 2 на (добавив call):

call Abaqus python -c "import BpT; BpT.data_extract('Bond_Test_Script')"

В качестве отступления, я бы также попытался отказаться от использования :: в качестве маркера комментария. (придерживайтесь rem). Это kludge, на самом деле оператор метки, такой же как :some_label, но использующий недопустимое имя, которое часто не очень хорошо работает в более сложных ситуациях, таких как циклы в скобках и оператор if.

...