1 Востаннє редагувалося ktretyak (08.11.2014 13:55:21)

Тема: В *.bat файлі не всі інструкції виконуються

Ніхто не в курсі чому у *.bat файлі виконуються не всі записані інструкції? Причому ніякої помилки не виникає.

Наприклад, наступний сценарій не дійде до команди pause:

grunt package
pause

Зрозуміло, що в даному випадку може бути щось записано в сам сценарій package, що спричиняє переривання, але сильно сумніваюсь в цьому, бо таке відбувається і з іншими командами... хоча, звичайно може бути й таке, але я просто не бачу в цьому логіки, а тому припускаю, що тут є якась особливість роботи команд через batch-файли.

Ніхто не в курсі?

2

Re: В *.bat файлі не всі інструкції виконуються

grunt — це ім'я іншого батника? У .bat є одна цікава особливість: якщо ми з одного батника запускаємо інший, відбувається перехід на нього без повернення назад. Щоб зробити виклик з поверненням, використовуйте інструкцію call:

call grunt package
pause
py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊
Подякували: ktretyak, Djalin, leofun013

3

Re: В *.bat файлі не всі інструкції виконуються

Такого бути не повинно. Коли grunt, щоб це не було, завершує виконання будь-яким чином, він повертається до bat-файлу - звісно, якщо не вбиває оболонку.

4

Re: В *.bat файлі не всі інструкції виконуються

Якщо grunt — екзешник, повернення відбувається. Якщо батник — ні. Можете самі створити пару батч-файлів і погратися з ними.
Ця особливість створює чимало незручностей (пишучи filename, ми не знаємо, filename.exe це чи filename.bat, а від цього залежить подальше виконання сценарію), але її продовжують зберігати для сумісності з раннім DOSом. В принципі, екзешник теж можна викликати з допомогою call — це нічого не змінить, зате код позбудеться неоднозначностей.

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊
Подякували: koala, leofun012

5

Re: В *.bat файлі не всі інструкції виконуються

Дякую, P.Y., допомогло.

P.S. Що таке grunt