Запуск командного файла из другого командного файла - PullRequest
2 голосов
/ 03 февраля 2012

Я хочу запустить пакетный файл 1 (путь C: \ 3rdparty \ Test \ App) из пакетного файла 2 (C :) и VS2008.sln есть в C: \ 3rdparty \ Test \ App \ VS2008

Пакетный файл 1

REM BatchFile1.bat

set DEVENV_PATH=%VS90COMNTOOLS%..\IDE

REM ---------------------------------------------------------------------

set OUTDIR=.\output\windows\x86
rmdir /S /Q %OUTDIR%
mkdir %OUTDIR%

call "%DEVENV_PATH%\devenv.com" VS2008\VS2008.sln /Rebuild "Release|Win32"
call "%DEVENV_PATH%\devenv.com" VS2008\VS2008.sln /Rebuild "Debug|Win32"

REM ---------------------------------------------------------------------

set OUTDIR=.\output\windows\x64
rmdir /S /Q %OUTDIR%
mkdir %OUTDIR%

call "%DEVENV_PATH%\devenv.com" VS2008\VS2008.sln /Rebuild "Release|x64"
call "%DEVENV_PATH%\devenv.com" VS2008\VS2008.sln /Rebuild "Debug|x64"

REM ---------------------------------------------------------------------


echo "BatchFile1.bat completed."

Пакетный файл 2

echo "Running Batch File 2"
call C:\3rdparty\Test\App\BatchFile1.bat

Здесь, когда batchfile1 вызывается из Batchfile2, он не может выполнить VS2008.sln, поскольку путь отличается. Я не хочу изменять batchfile1.Можно ли внести изменения в пакетный файл 2, чтобы выполнить пакетный файл1.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2012

Попробуйте изменить каталог на каталог BatchFile1.

echo "Running Batch File 2" 
cd C:\3rdparty\Test\App
call BatchFile1.bat 
1 голос
/ 03 февраля 2012

Я добавил в ваш скрипт локальную переменную, для которой задан путь BatchFile1, каким бы он ни был, теперь вы можете использовать путь относительно пути BatchFile1.

REM BatchFile1.bat

set scriptPath=%~dp0
set scriptPath=%scriptPath:~0,-1%

rem now %scriptPath%  contain the script path, and then you can use command like
rem "%scriptPath%\MyCommand.exe" /MyParameter=123_abcd


set DEVENV_PATH=%VS90COMNTOOLS%..\IDE

REM ---------------------------------------------------------------------

set OUTDIR=.\output\windows\x86
rmdir /S /Q %OUTDIR%
mkdir %OUTDIR%

call "%DEVENV_PATH%\devenv.com" "%scriptPath%\VS2008\VS2008.sln" /Rebuild "Release|Win32"
call "%DEVENV_PATH%\devenv.com" "%scriptPath%\VS2008\VS2008.sln" /Rebuild "Debug|Win32"

REM ---------------------------------------------------------------------

set OUTDIR=.\output\windows\x64
rmdir /S /Q %OUTDIR%
mkdir %OUTDIR%

call "%DEVENV_PATH%\devenv.com" "%scriptPath%\VS2008\VS2008.sln" /Rebuild "Release|x64"
call "%DEVENV_PATH%\devenv.com" "%scriptPath%\VS2008\VS2008.sln" /Rebuild "Debug|x64"

REM ---------------------------------------------------------------------


echo "BatchFile1.bat completed."
0 голосов
/ 03 февраля 2012

Вы могли бы поставить

pushd %~dp0

и

popd

вокруг вашего кода в batchfile1.bat

, который изменит текущий каталог на тот, где находится batchfile1, а затем вернется обратно, когда вы закончите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...