Показать полную графическую версию : [решено] Определить путь к исполняемому файлу и запустить его.
Lucretius
04-04-2013, 18:25
Переменная %ProgramFiles% возвращает путь к «Program Files» на системном разделе.
Каким образом можно определить путь к исполняемому файлу(букву диска), если он установлен в папке «Program Files» на другом разделе и реализовать подобный сценарий:
If exist "%ProgramFiles%\Prog\Prog.exe" (
Start "" "%ProgramFiles%\Prog\Prog.exe"
) Else (
Echo «Текст»
Pause
Exit
)
deviance
04-04-2013, 19:07
Lucretius, достаточно взять первые два символа строки, в которую раскрывается переменная %ProgramFiles%, чтобы узнать букву диска:
@echo %programfiles:~0,2%
Lucretius
04-04-2013, 20:08
deviance, Это мне известно, но мне надо другое. Вероятно, я не совсем точно изложил суть задачи. Мне необходимо сделать батник, который найдёт программу по её имени и запустит её, вне зависимости от того, на каком диске она находиться. Директория установки по умолчанию: «\Program Files\Prog\». Установку в папку НЕ назначенную по умолчанию я не рассматриваю.
Предположим, что на машине пользователя существует две папки «Program Files» на дисках С и D, допустим, что программа установлена в «D:\Program Files\Prog\» , а переменная %ProgramFiles% возвращает «C:\Program Files» так вот, нужно, чтобы скрипт нашёл программу и запустил её. Выше приведённый скрипт я привёл в пример, чтобы объяснить конечную цель.
Lucretius, примерно так?
for %%a in (a,b,c,d,e,f) do if exist "%%a:\Program Files\Prog\proga.exe" start "" "%%a:\Program Files\Prog\proga.exe"
Lucretius
04-04-2013, 20:40
sov44, Да, это то, что нужно. Спасибо!
Lucretius
04-04-2013, 21:28
Возникла, следующая проблема: добавил в список все 26 букв, при обращении к устройствам со съёмными носителями (напр. картридер) появляются окна с ошибкой "В устройстве нет диска. Вставьте диск в устройство". Ищу другой вариант...
тогда наверное так
for /f "skip=1" %%a in ('2^>nul WMIC LogicalDisk WHERE "DriveType='3'"') do (
if exist "%%a\Program Files\Prog\proga.exe" start "" "%%a\Program Files\Prog\proga.exe"
)
Lucretius
04-04-2013, 22:59
Что-то не так. Команда «WMIC LogicalDisk WHERE "DriveType='3'"» в консоли работает, выводиться информация о логических дисках, но в составе приведённого Вами скрипта(bat-файл) все буквы дисков определяются как "0"
C:\Windows\system32>(if exist "0\Program Files\Prog\proga.exe" start "" "0\Progr
am Files\Prog\proga.exe" )
C:\Windows\system32>(if exist "0\Program Files\Prog\proga.exe" start "" "0\Progr
am Files\Prog\proga.exe" )
C:\Windows\system32>(if exist "0\Program Files\Prog\proga.exe" start "" "0\Progr
am Files\Prog\proga.exe" )
Lucretius
04-04-2013, 23:30
Причём буквы съёмных "DriveType='2' и привода "DriveType='5' определяет!?
Lucretius
05-04-2013, 00:05
sov44, Ваш скрипт заработал с небольшой поправкой:
for /f "skip=1" %%a in ('wmic LogicalDisk where "DriveType=3" get Name') do (
if exist "%%a\Program Files\Prog\proga.exe" start "" "%%a\Program Files\Prog\proga.exe"
)
Спасибо!
Lucretius
05-04-2013, 16:48
Подскажите, возможно ли включить в скрипт:
for %%a in (a,b,c,d,e,f) do if exist "%%a:\Program Files\Prog\proga.exe" start "" "%%a:\Program Files\Prog\proga.exe"
список логических дисков выдаваемый утилитой diskpart (list volume|diskpart)?
Дело в том, что оговоренная выше wmic.exe отсутствует в XP home.
Может существуют сторонние утилиты(от Nirsoft и т.д.) способные решить поставленную задачу?
Lucretius
08-04-2013, 19:21
Всё, разобрался. Сделал так:
For /f "tokens=3,*" %%i In ('cmd /c echo list volume ^| diskpart ^|^
findstr /i "раздел*"') Do (
for %%a in ( %%i ) do if exist "%%a:\Program Files\Prog\proga.exe" (
start "" "%%a:\Program Files\Prog\proga.exe"
)
) (кодировка - OEM 866)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.