Пакетний файл перестає працювати після першої команди


76

Я використовую інструмент "HTML Match" для порівняння двох файлів HTML. Оскільки мені доводиться порівнювати багато файлів, я створюю пакетний файл, подібний до наступного. Наприклад, я даю лише п’ять наборів файлів.

cd "C:\Program Files\HTML Match"
HTMLMATCH.EXE "D:\Raj\compare1\a1.html" "D:\Raj\compare2\a1.html" "D:\Raj\compare_res\a1.html"
HTMLMATCH.EXE "D:\Raj\compare1\a2.html" "D:\Raj\compare2\a2.html" "D:\Raj\compare_res\a2.html"
HTMLMATCH.EXE "D:\Raj\compare1\a3.html" "D:\Raj\compare2\a3.html" "D:\Raj\compare_res\a3.html"
HTMLMATCH.EXE "D:\Raj\compare1\a4.html" "D:\Raj\compare2\a4.html" "D:\Raj\compare_res\a4.html"
HTMLMATCH.EXE "D:\Raj\compare1\a5.html" "D:\Raj\compare2\a5.html" "D:\Raj\compare_res\a5.html"

Коли я виконую цей командний файл у підказці cmd, лише перший рядок, тобто лише "a1.html", порівнюється і дає результат. Потім виконання зупиняється.

Відповіді:


127

Додайте callперед командами, які ви виконуєте.

Ви також можете змінити це на цикл for, так що:

FOR /L %%i in (1,1,5) DO CALL HTMLMATCH.EXE D:\Raj\compare%%i%%\a%%i%%.html D:\Raj\compare%%i%%\a%%i%%.html D:\Raj\compare_res\a%%i%%.html

ви маєте на увазі "дзвінок" перед кожним рядком, який я дав, або просто зателефонувати xyz.bat?
раджашекар

1
Я маю callна увазі перед кожним рядком, який ви написали (крім, мабуть, cd).
Бен,

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

Так, цикл for зробить це. Змініть те, що вам потрібно. Введіть help forвікно cmd, щоб дізнатися, що вам потрібно. Додавання callдопомогло?
Бен,

58

Відповідь на вашу проблему - писати CALL HTMLMATCH.EXE (і решту параметрів). Просто використовуйте CALLперед кожною виконуваною командою в командному файлі.


34
Сьогодні я написав свій перший пакетний файл приблизно за 5 років і зіткнувся з цією ж проблемою. Якщо хтось задається питанням, причина додавання "виклику" допомагає в тому, що безпосередній виклик другого пакетного файлу з першого змушує другий пакетний файл замінити перший всередині інтерпретатора. Коли другий пакетний файл вийде, інтерпретатор забуде все про вихідний пакетний файл, який ви викликали. Команда виклику змушує інтерпретатор відстежувати, де зупинився файл виклику bbatch, і повертатися туди, коли викликаний пакетний файл виходить.
Марк Бессі

1
@MarkBessey: Так, ви абсолютно праві, викликаючи другий пакетний файл із самого першого, але тут це не так, оскільки викликана програма є .EXE, і вона НЕ вимагає CALL!
Aacini

Це правда, але я думаю, що варто мати рішення відповідних проблем, оскільки це результат, який з’являється при пошуку тут більш поширеної проблеми. Я також не можу придумати будь-якого іншого способу, щоб відбулася описана поведінка, тому мені цікаво, чи не описується деталь.
Mark Bessey

1
@Aacini здається, що деякі виконувані файли виходять із дивним кодом виходу, що перешкоджає запуску решти командного файлу, і в цьому випадку обхідний спосіб використання CALL для запуску в іншому пакетному файлі працює.
Ман

1

Я шукав щось справді подібне і спробував, думаю, всі відповіді залишились тут, але нарешті я знайшов рішення своєї проблеми !!

У своєму сценарії я хочу перевірити, чи запущений один процес, якщо ні, запустіть його (.exe), а потім перевірте, чи запущений інший процес, якщо ні, запустіть його теж (але залиште всі програми відкритими), і проблема полягає в що перший .exe був запущений, але потім не перейшов до другого, оскільки він чекав, поки процес закінчиться. Це нарешті працює для мене з самого початку, і магія приходить з ...

/ окремо

це працює для мене як:

start "program1" /separate program1.exe
other commands

До того, як він зупинився після запуску програми1, я думаю, він чекав, поки його не закриють, але цього не сталося, тому що я хотів залишити його відкритим. Тепер із запуском / відокремленням воно продовжується з іншими командами.

Я знайшов його на іншому форумі, але справа в тому, що це керівництво, / окремо використовується для запуску в іншому просторі пам'яті.


-1

Вам не потрібно вставляти лапки там, де між ними немає пробілів.

Спробуйте:

HTMLMATCH.EXE D:\Raj\compare1\a1.html D:\Raj\compare2\a1.html D:\Raj\compare_res\a1.html

Можливо, це вирішить вашу проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.