Войти

Показать полную графическую версию : [решено] Как узнать полный путь до запущенного bat-скрипта


Anton_moonray
16-09-2012, 16:09
Нужно написать 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, жду предложений. Заранее спасибо.

Petya V4sechkin
16-09-2012, 16:56
полный путь до запущенного bat-скрипта
Echo %~dp0

Anton_moonray
16-09-2012, 18:05
Про код "%~dp0" я знаю, хотелось бы поконкретнее на примере, т.к. в bat я еще не совсем разбираюсь. Задача такая: запуск файла 1.bat, который в свою очередь запустит два других скрипта (или просто откроет файлы) из той же папки. Думаю, уже понятно, что папка не будет находится в одном месте постоянно, а будет использована и на др. ПК. Долго мучаюсь, объясните "на пальцах", либо на VBS. Очень надо.

Petya V4sechkin
16-09-2012, 18:15
который в свою очередь запустит два других скрипта (или просто откроет файлы) из той же папки
call "%~dp0другой_скрипт.cmd"
call "%~dp0еще_один_скрипт.cmd"

Anton_moonray
16-09-2012, 18:33
Спасибо! Не думал, что так коротко и просто.




© OSzone.net 2001-2012