Компьютерный форум 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=140110)

Nun-Nun 14-05-2009 15:42 1118349

Как организовать поиск нужного диска и запуск с него приложения?
 
Как с помощью bat-ника организовать автозапуск программы Setup.exe с CD-ROM-ного диска, буква которого на разных компах может оказаться неодинаковой (имеется ввиду буква диска C:, D:, E: и.т.д.)?

gora 14-05-2009 15:50 1118359

Если Setup.exe лежит в корне CD, а в корне других дисков нет файла с таким именем, то попробуйте так:
Код:

For %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do If Exist %%i:\Setup.exe %%i:\Setup.exe

Nun-Nun 14-05-2009 16:28 1118401

gora, Спасибо! Действительно работает!
А можно ли задать условие не просто по букве диска, а ещё и по метке тома?

Nun-Nun 14-05-2009 21:39 1118669

Как организовать поиск нужного диска по метке тома?
 
Смысл сабжа в том, чтобы обеспечить запуск Setup.exe только с нужного диска и исключить запуск одноимённого файла с других дисков.

El Sanchez 14-05-2009 21:48 1118677

Пробуй так:
Код:

@echo off
set labelcd=твоя метка
wmic /? 1>nul
for /f "tokens=2* delims==" %%a in ('wmic path Win32_LogicalDisk where VolumeName^=^"%labelcd%^" get name /value') do start %%a\setup.exe


El Sanchez 14-05-2009 22:02 1118687

Прикольно, пока писал ответ в предыдущей твоей теме про запуск, ты уже создал новую с новым условием :) . Меняю код:
Код:

@echo off
set labelcd=твоя метка
set namecd=буква диска с двоеточием
wmic /? 1>nul
for /f "tokens=2* delims==" %%a in ('wmic path Win32_LogicalDisk where ^"VolumeName^=^"%labelcd%^" and Name^=^"%namecd%^"^" get name /value') do start %%a\setup.exe


Nun-Nun 14-05-2009 22:05 1118689

El Sanchez, попробовал Ваш вариант. После запуска скрипта открывается окно с файлами на CDROM-е, но Setup.exe при этом не запускается.

Nun-Nun 14-05-2009 22:08 1118694

El Sanchez, нет, не работает. Во-первых, открывается окно и висит на экране, пока вручную его не закроешь (а хотелось бы, чтобы оно автоматически закрывалось); во-вторых, Setup.exe не запускается и, в-третьих, чтобы в команде SET указать нужную букву диска нужно её знать, а я её заранее знать не могу - на одном компе это может быть D:, на другом G:, на третьем ещё что-нибудь.

Vadikan 15-05-2009 01:19 1118819

Nun-Nun, судя по всему, у вас диск не жесткий, а оптический или съемный. Тогда не усложняйте, а используйте скрипт из сообщения 2. Вам шашечки или ехать?

gora 15-05-2009 09:03 1118936

Nun-Nun, дабы уменьшить вероятность ложного запуска файла Setup.exe с другого диска (не с того с которого хотите), можно сделать следующее:
1 Изменить имя файла Setup.exe на какое то уникальное, например, My_Super_Puper_Setup.exe. Придумайте сами.
2 Положить в корень CD маркерный файл произвольного содержания с уникальным именем и расширением, например, My_Super_Puper_Marker.xyz Придумайте сами.
3 Объединить оба варианта из предыдущих пунктов.

Тогда .bat файл может выглядеть так:
Код:

@Echo Off
:: Внесите сюда имя файла запуска
Set MySetup=My_Super_Puper_Setup.exe
:: Внесите сюда имя маркерного файла
Set MyMarker=My_Super_Puper_Marker.xyz
For %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do If Exist %%i:\%MyMarker% If Exist %%i:\%MySetup% %%i:\%MySetup%
Exit


El Sanchez 15-05-2009 09:53 1118972

Короче, если поиск по букве диска, то использовать код от gora, если поиск по метке диска, то это (теперь работает):
Код:

@echo off
set labelcd=твоя метка
wmic /? 1>nul
for /f "tokens=2* delims==" %%a in ('wmic path Win32_LogicalDisk where VolumeName^=^"%labelcd%^" get name /value') do cd /d %%a&setup.exe


Nun-Nun 15-05-2009 10:17 1118994

Цитата:

Цитата Vadikan
судя по всему, у вас диск не жесткий, а оптический »

Конечно оптический, я ведь об этом в своём самом первом посте упоминал.
Цитата:

Цитата Vadikan
не усложняйте, а используйте скрипт из сообщения 2. »

Я и не говорю, что этот вариант непригоден. Он прекрасно работает и за него я gora очень благодарен. Кстати, и Вам я весьма признателен за помощь! Просто я ещё только учусь премудростям создания bat-ников и хочется понять - может ли поставленная задача решаться как-то ещё.

gora, спасибо за подсказку! По поводу файла с уникальным именем очень ценная идея, и такой файл на диске действительно есть, так что наверное этим и воспользуюсь. Просто хотелось чисто для себя понять возможен ли в принципе поиск нужного диска по метке тома. У меня была мысль, что если как-то считать на нужном диске метку тома и букву диска, а потом по полученным результатам задать условие типа логического "и", то задача бы полностью разрешилась.

El Sanchez, ура, всё заработало!

ОГРОМНЕЙШЕЕ ВСЕМ СПАСИБО!!!!!!

belenkove 27-05-2009 17:15 1128824

Вот тебе БОТИНОК

Код:

@echo off
rem Определение буквы флешки по её метке
rem Беленков Евгений belenkove@yandex.ru
set FLASHLABEL=KINGSTON
set FLASHDRIVE=
for %%a in (Z: Y: X: W: V: U: T: S: R: Q: P: O: N: M: L: K: J: I: H: G: F: E: D: C:) do for /f "tokens=1-7" %%b in ('vol %%a') do if "%%h" == "%FLASHLABEL%" set FLASHDRIVE=%%a
cls
if "%FLASHDRIVE%" == "" (
        echo Работа невозможна отсутствует флешка!!!
        echo.
        echo Вставьте флешку с меткой "%FLASHLABEL%"
        pause > nul
        exit /b
)
if not "%FLASHDRIVE%" == "" (
        echo %FLASHDRIVE%
        pause
)
exit /b


Nun-Nun 28-05-2009 09:12 1129227

belenkove, спасибо, пригодится! Это уже третий вариант!

Medic84 28-05-2009 12:42 1129404

Nun-Nun, Если программа Setup.exe лежит там же где и сам bat'ник то можно попробовать так:
Код:

Start "" "%~dp0\setup.exe"
%~dp0 - возвращает путь где лежит сам bat'ник. т.е. если он лежит в D:\ он будет запускать комынды с него...

Если что вот темка автозапуска: Автозапуск программ при включении флешки

belenkove 28-05-2009 15:33 1129538

Модификация "Вот тебе БОТИНОК"
Теперь не загрязняет экран и работает мгновенно :)

Код:

@echo off
rem Определение буквы диска по метке
rem Беленков Евгений belenkove@yandex.ru
rem
set FLASHLABEL=KINGSTON
for %%a in (Z: Y: X: W: V: U: T: S: R: Q: P: O: N: M: L: K: J: I: H: G: F: E: D: C:) do if exist %%a\. for /f "tokens=7" %%b in ('vol %%a') do if "%%b" == "%FLASHLABEL%" set FLASHDRIVE=%%a
if not "%FLASHDRIVE%" == "" (echo %FLASHDRIVE%) else (echo Вставьте флешку с меткой "%FLASHLABEL%")
pause > nul

даже самому понравилось!

Nun-Nun 28-05-2009 22:12 1129795

belenkove, Medic84, большое спасибо!


Время: 10:01.

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