Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Определить путь к исполняемому файлу и запустить его. (http://forum.oszone.net/showthread.php?t=257872)

Lucretius 04-04-2013 18:25 2125761

Определить путь к исполняемому файлу и запустить его.
 
Переменная %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 2125793

Lucretius, достаточно взять первые два символа строки, в которую раскрывается переменная %ProgramFiles%, чтобы узнать букву диска:
Код:

@echo %programfiles:~0,2%

Lucretius 04-04-2013 20:08 2125828

deviance, Это мне известно, но мне надо другое. Вероятно, я не совсем точно изложил суть задачи. Мне необходимо сделать батник, который найдёт программу по её имени и запустит её, вне зависимости от того, на каком диске она находиться. Директория установки по умолчанию: «\Program Files\Prog\». Установку в папку НЕ назначенную по умолчанию я не рассматриваю.
Предположим, что на машине пользователя существует две папки «Program Files» на дисках С и D, допустим, что программа установлена в «D:\Program Files\Prog\» , а переменная %ProgramFiles% возвращает «C:\Program Files» так вот, нужно, чтобы скрипт нашёл программу и запустил её. Выше приведённый скрипт я привёл в пример, чтобы объяснить конечную цель.

sov44 04-04-2013 20:22 2125835

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 2125850

sov44, Да, это то, что нужно. Спасибо!

Lucretius 04-04-2013 21:28 2125881

Возникла, следующая проблема: добавил в список все 26 букв, при обращении к устройствам со съёмными носителями (напр. картридер) появляются окна с ошибкой "В устройстве нет диска. Вставьте диск в устройство". Ищу другой вариант...

sov44 04-04-2013 22:10 2125905

тогда наверное так
Код:

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 2125927

Что-то не так. Команда «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 2125948

Причём буквы съёмных "DriveType='2' и привода "DriveType='5' определяет!?

Lucretius 05-04-2013 00:05 2125965

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 2126341

Подскажите, возможно ли включить в скрипт:
Код:

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 2128408

Всё, разобрался. Сделал так:
Код:

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)


Время: 10:18.

Время: 10:18.
© OSzone.net 2001-