|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Программа, показывающая, какой файл выполнится, если набрать ком. переданную в парам. |
|
CMD/BAT - [решено] Программа, показывающая, какой файл выполнится, если набрать ком. переданную в парам.
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать
Написать программу, показывающую, какой файл выполнится, если набрать команду, переданную в параметрах.
Должны поддерживаться как команды с расширением, так и без (т.е. calc и calc.exe) Пример запуска: >which.cmd calc C:\Windows\system32\calc.exe //Желательно без использования сложных регулярных выражений. |
|
Отправлено: 21:08, 24-10-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать @echo off setlocal enableextensions enabledelayedexpansion set sCommand=%~1 if defined sCommand ( if "%~x1" equ "" ( call :CheckExtension "%sCommand%" %pathext% ) else ( for %%i in ("%sCommand%") do if exist "%%~$PATH:i" echo "%%~$PATH:i" ) ) else ( echo Usage: %~nx0 ^<command^> exit /b 1 ) endlocal exit /b 0 :CheckExtension setlocal enableextensions enabledelayedexpansion :Repeat set sExtension=%~2 if defined sExtension ( for %%i in ("%~1%sExtension%") do if exist "%%~$PATH:i" echo "%%~$PATH:i" shift /2 goto :Repeat ) endlocal exit /b 0 |
Последний раз редактировалось Iska, 25-10-2012 в 02:20. Причина: Упростил код: «%%~dp$PATH:i%%~i» → «%%~$PATH:i» Отправлено: 21:36, 24-10-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Огромное спасибо не расскажите как это работает?
1) что делает этот параметр? 2) что значит equ ? просмотрел справку по ифу не нашел 3) зачем нужна данная строка? и что значит 4) зачем тут %%~i 5) Usage?? и %~nx0 ^<command^> 6) ~2 означает что берется все начиная с третьего символа, или я путаю? 7) если она не пустая? 8)и по всему репиту немогу точно понять что он делает ~1,~2 и ~i ставят меня в тупик |
Отправлено: 23:19, 24-10-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 1.
2. «Если первый параметр командного файла имеет расширение, то …». Подробности: Цитата элькхар:
3. «Вызвать новый контекст командного файла по метке «:CheckExtension», передав ему в качестве параметров переменные окружения «sCommand» и «pathext». 4. Цитата элькхар:
Я тут просто «перебдел» c «dp». Можно упростить: «%%~dp$PATH:i%%~i» → «%%~$PATH:i». Я поправил код выше. 5. Можно так: Это просто подсказка, вызываемая в случае, если командный файл был вызван без параметра. 6. Путаете. «Присвоить переменной окружения «sExtension» значение второго переданного на метку параметра». 7 и 8. Цитата элькхар:
Смотрите: Рассмотрим ход исполнения: … :Repeat set sExtension=%~2 if defined sExtension ( for %%i in ("%~1%sExtension%") do if exist "%%~$PATH:i" echo "%%~$PATH:i" shift /2 goto :Repeat ) … На первом шаге На втором шаге И так до тех пор, пока В принципе, можно предусмотреть условие, которое сразу будет прерывать последующий перебор расширений, как только будет найдено первое же совпадение. |
|||
Отправлено: 02:41, 25-10-2012 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
DNS/DHCP - Какой адрес должен вернуть DNS если есть 2 записи А | Tonny_Bennet | Сетевые технологии | 2 | 04-05-2012 16:03 | |
CMD/BAT - [решено] Включить программу если включена то выключить | Tiar | Скриптовые языки администрирования Windows | 2 | 01-02-2012 01:10 | |
Если на диске есть ОС, то при установке спрашивает, какой раздел использовать | tirex555 | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 1 | 31-01-2008 16:20 | |
Как удалить программу если система не отвечает на запросы | laguna777 | Microsoft Windows 2000/XP | 3 | 13-02-2007 02:04 | |
Как изменить надпись, показывающую версию винды на десктопе? | npomoH | Хочу все знать | 5 | 07-07-2006 23:01 |
|