Почему пакетный файл не запускается при вызове из другого пакетного файла?

У меня есть пакетный файл, который сначала создает другой пакетный файл, содержащий команду ClearCase cleartool, а затем запускает его:

ECHO cleartool lsactivity -long "%ACTIVITY%"^>"%OUTPUTFILE%">FILETORUN.bat
CALL FILETORUN.bat

При запуске пакета FILETORUN.bat генерируется в правильном формате, но CALL к нему полностью игнорируется.

Если я ECHO вывожу после CALL в файл журнала, я вижу, что скрипт просто пропускает его.

Что бы это могло быть?

Я попытался удалить CALL, но это не имеет значения.

ИЗМЕНИТЬ: РЕШЕНИЕ

Спасибо всем за участие. Я нашел проблему. Перед записью в пакет и вызовом пакета в скрипте была команда чтения информации в переменную из файла:

SET /p FILETODELETE=<rmname_%CLEARCASE_USER%.tmp

Он читает только первую строку. По какой-то причине это создало конфликт с временным пакетным файлом, и я понятия не имею, почему. Я использовал другое решение для чтения первой строки из файла, и конфликт больше не возникает:

(set FILETODELETE=)
for /f "delims=" %%q in (rmname_%CLEARCASE_USER%.tmp) do if not defined FILETODELETE set FILETODELETE=%%q

Если кто-то может пролить свет, было бы здорово!


person Andrew    schedule 26.02.2013    source источник
comment
Вы уверены, что FILETORUN.bat не вызывается? Или он просто не делает того, что, по вашему мнению, должен делать? Попробуйте закомментировать эхо-строку, написать FILETORUN.bat вручную (просто сделайте так, чтобы он что-то повторял) и убедите себя, что на самом деле он вообще не работает.   -  person Nate Hekman    schedule 26.02.2013
comment
Возможно, вам нужно указать путь: CALL "%OUTPUTFILE%\FILETORUN.bat"?   -  person Nate Hekman    schedule 26.02.2013
comment
Вы говорите, что он не запускается - просто cleartool lsactivity возвращает только ошибку (что будет, если вы не находитесь в поле зрения), которая не будет перенаправлена ​​​​в выходной файл? Вы можете попробовать перенаправить stderr в файл (добавьте 2>&1 в ваш сгенерированный пакетный файл, который также будет перенаправлять ошибки — вам нужно экранировать >) и посмотреть, даст ли это вам какие-либо подсказки.   -  person icabod    schedule 26.02.2013
comment
@NateHekman Привет, Нейт. Я пытался запустить bat, используя полный путь, но это не имеет значения. Я также попытался добавить новую строку: ECHO ECHO TEST^>TEST.TXT>TEST.BAT, за которой следует CALL TEST.BAT, и это работает. Странно то, что пакет cleartool выше работает с операцией возврата ClearCase, но не с операцией удаления ClearCase (скрипты являются триггерами). Единственная разница в том, что в последнем случае другой скрипт выполняется непосредственно перед тем, который вызывает cleartool. Есть ли способ правильно выйти из этой первой партии? В настоящее время я использую EXIT /B в качестве последней строки.   -  person Andrew    schedule 26.02.2013
comment
@icabod Привет, icabod. Команда cleartool lsactivity -long вне контекста представления возвращает основную информацию об активности, такую ​​как заголовок, владелец или поток без набора изменений, и это все, что мне нужно. Как я сказал Нейту, пакет отлично работает с операциями возврата ClearCase, но не с операциями удаления. Кроме того, как только bat-файл сгенерирован (а не запущен), я могу просто дважды щелкнуть его в проводнике Windows, и он сгенерирует нужный мне файл. Очень странное поведение!   -  person Andrew    schedule 26.02.2013
comment
@NateHekman Еще раз привет, Нейт. В качестве обновления вашей первой заметки я жестко закодировал сгенерированную летучую мышь, которая не запускалась в предыдущей попытке, в сценарий с использованием CALL <previousbat>.bat, и это работает. Сценарий, похоже, не хочет запускать его, как только он будет сгенерирован.   -  person Andrew    schedule 26.02.2013
comment
Это странно, я не понимаю, почему это может быть. Но если сделать шаг назад, нужно ли вам записывать cleartool etc в пакетный файл и запускать пакетный файл? Не могли бы вы просто запустить cleartool напрямую?   -  person Nate Hekman    schedule 26.02.2013
comment
@NateHekman Хотел бы я знать, что происходит! Если я удалю промежуточный пакетный файл, у меня возникнет моя предыдущая проблема write-to-file">здесь, которую мне, похоже, удалось решить. К сожалению, этот подход вызывает эту проблему невыполнения.   -  person Andrew    schedule 26.02.2013
comment
Попробуйте добавить ECHO pause>>FILETORUN.bat, чтобы увидеть, появляются ли какие-либо сообщения об ошибках?   -  person AjV Jsy    schedule 26.02.2013
comment
Спасибо всем за участие. Я нашел проблему. Перед записью в пакет и вызовом пакета в скрипте была команда чтения информации в переменную из файла: SET /p FILETODELETE=<rmname_%CLEARCASE_USER%.tmp. Он читает только первую строку. По какой-то причине это создало конфликт с временным пакетным файлом, и я понятия не имею, почему. Я использовал другое решение для чтения первой строки из файла, и теперь все работает. Если кто-то может пролить свет, было бы здорово!   -  person Andrew    schedule 27.02.2013
comment
Попробуйте поставить символ @ перед SET или CALL. Если это не исправит, можете ли вы повторить вопрос, поскольку я не на 100% понимаю, что работает, а что нет, хотя @ исправил проблему, похожую на мою...   -  person Lizz    schedule 01.03.2013
comment
Вы должны отметить это как решенное   -  person rud3y    schedule 08.03.2013


Ответы (1)


SET /P ожидает ввода пользователя, поэтому он фактически завершит команду тем, что вы пытаетесь выполнить после этого, и использует входной буфер, что может привести к разным результатам на каждой машине. Дополнительные сведения см. в справочнике по команде set.

person Efren    schedule 24.06.2013