![]() |
Как узнать полный путь до запущенного bat-скрипта
Нужно написать bat-файл, запускающий скрипты находящиеся в той же папке.
Нужно знать, в каком каталоге находится запущенный bat-файл. Ну, например, в этом же каталоге лежат другие скрипты, которые должны быть запущены текущим выполняющемся батником. Для того, чтобы он их запустил, ему было бы неплохо знать, где их искать, потому что вы могли запустить его находясь в совершенно произвольной директории. Или, к примеру, воспользоваться для запуска не самим файлом bat, а символической ссылкой, лежащей в другом каталоге, которая указывает на bat-файл. Можно, конечно, поступить просто и в самом батнике жёстко прописать полный путь до каталога, в котором этот он лежит. В bash-скрипте получится что-то вроде этого, но это не годится для Windows. #!/bin/bash DIRECTORY="/home/user/my_scripts" cd $DIRECTORY # запуск "соседних" скриптов ./script1.sh ./script2.sh Вполне рабочий вариант и две обозначенные выше проблемы будут решены, но если надо будет переместить скрипт в другой каталог, то и значение переменной придётся руками поменять в самом скрипте. Не очень удобно. Для красивого решения проблемы нужно знать всего три вещи: 1.Путь до выполняющегося скрипта можно узнать с помощью $0, но проблема в том, что он относительный, т.е. если вы запустите скрипт как ./script.sh, то и $0 будет содержать ./script.sh 2.Команда readlink с параметром -e решит сразу две проблемы: во-первых она вернет полный путь до файла скрипта, если вы воспользовались для запуска символической ссылкой (даже если это была цепочка симлинков), а во-вторых преобразует относительный путь, если такой получен с помощью $0, в абсолютный 3.Чтобы избавиться от имени файла скрипта в конце абсолютного пути, нужно воспользоваться командой dirname Пример: #!/bin/bash # полное путь до скрипта ABSOLUTE_FILENAME=`readlink -e "$0"` # каталог в котором лежит скрипт DIRECTORY=`dirname $ABSOLUTE_FILENAME` # запуск "соседних" скриптов $DIRECTORY/script1.sh $DIRECTORY/script2.sh Либо если есть варианты в VBS, жду предложений. Заранее спасибо. |
Цитата:
Код:
Echo %~dp0 |
Про код "%~dp0" я знаю, хотелось бы поконкретнее на примере, т.к. в bat я еще не совсем разбираюсь. Задача такая: запуск файла 1.bat, который в свою очередь запустит два других скрипта (или просто откроет файлы) из той же папки. Думаю, уже понятно, что папка не будет находится в одном месте постоянно, а будет использована и на др. ПК. Долго мучаюсь, объясните "на пальцах", либо на VBS. Очень надо.
|
Цитата:
Код:
call "%~dp0другой_скрипт.cmd" |
Спасибо! Не думал, что так коротко и просто.
|
Время: 14:34. |
Время: 14:34.
© OSzone.net 2001-