Вызов командного файла из другого пакетного файла в другом каталоге - ресурсы не найдены

Я работаю с installshield и имею группу пакетных файлов, которые я хочу запустить как часть процесса установки. Вместо того, чтобы выполнять каждый командный файл с установочного экрана, я хочу создать один пакетный файл, который выполняет все пакетные файлы.

Проблема заключается в том, что вызывающий пакетный файл помещает два каталога в другие. Когда командный файл пытается вызвать других, которые они не запускают, потому что они не могут найти нужные им ресурсы. Похоже, что когда они исполняются из командного файла с двумя каталогами, они почему-то используют относительный путь вызывающего пакетного файла. Правильно ли мое предположение?

Один из пакетных файлов, которые я вызываю, представляет собой пакетный файл для создания базы данных h2, вызов выглядит следующим образом:

call h2\bin\h2.bat

Если я перейду в каталог /h 2/bin в командной строке, h2.bat работает нормально, но как только я запустил его из вызывающего пакетного файла, это ошибка, которую я получаю.

Ошибка: не удалось найти или загрузить основной класс org.h2.tools.Console

Как я могу вызвать один пакетный файл из другого, не используя путь вызываемых пакетных файлов?

Ответ 1

Описание

Похоже, что когда они исполняются из командного файла два по каким-либо причинам они используют относительный путь вызов командного файла. Правильно ли мое предположение?

Да, ваше предположение верно. Вызов командного файла не изменит текущий рабочий каталог. Основной командный файл будет найден, потому что вы предоставляете правильный относительный путь, но все остальные относительные пути будут видны с точки зрения вашего текущего рабочего каталога, а не из каталога, содержащего основной пакетный файл.

%~dp0 является вашим другом, он дает букву диска и путь к пакетному файлу, содержащему эту последовательность символов. Используйте его как основу для относительных путей, и ваши командные файлы будут работать независимо от того, кто их называет.

Пример:

Фиктивный h2.bat, который не будет работать:

@echo off
h2.exe start

Работа h2.bat:

@echo off
"%~dp0\h2.exe" start

См. Что означает% ~ dp0 и как это работает? для более подробных объяснений %~dp0

Ответ 2

Попробуйте установить каталог:

cd ht\bin\
call h2.bat
cd %HOMEPATH%
REM  just reset to where ever you were before.

Если это не сработает, попробуйте использовать префикс C://в вашем пути. Это может/не работать. Удачи!

Ответ 3

Возможно, это связано с тем, что у вас нет разрешения. M сталкивается с той же проблемой, и я нашел решение, подобное этому, Щелкните правой кнопкой мыши на своей задаче, чем свойства. В свойствах нажмите вкладку "Общие", а затем нажмите "Группа пользователей или пользователя" и выберите подходящего пользователя.

Или создайте другой файл bat, чтобы вызвать ваш bat файл и расписать этот файл. вы можете создать файл bat как это -

откройте "Блокнот" и укажите исходный путь к файлу bat, а затем вызовите bat файл с именем, как -

D:

cd "E:/ABC/FirstJob/main/"

вызов main_run.bat

Теперь сохраните этот файл с расширением .bat.

Ответ 4

Предположим, что текущий файл .bat запущен на диске C, и вы хотите запустить файл .bat, помещенный в каталог D: затем в первую запись .bat.

D:
cd "D:/folder/folder2/"
call batFile.bat

Ответ 5

Я пробовал:

pushd h2\bin\

вызов h2.bat

= > Все в порядке.