Вы можете найти исполняемый файл на пути (или другой путь, как строки, если это необходимо):
c:\> for %i in (cmd.exe) do @echo. %~$PATH:i
C:\WINDOWS\system32\cmd.exe
c:\> for %i in (python.exe) do @echo. %~$PATH:i
C:\Python25\python.exe
Подробности можно найти в конце текста справки для "for"
команды, "for /?"
но краткое изложение:
%~i - expands %i removing any surrounding quotes.
%~fi - expands %i to a fully qualified path name.
%~di - expands %i to a drive letter only.
%~pi - expands %i to a path only.
%~ni - expands %i to a file name only.
%~xi - expands %i to a file extension only.
%~si - expanded path contains short names only.
%~ai - expands %i to file attributes of file.
%~ti - expands %i to date/time of file.
%~zi - expands %i to size of file.
%~$P:i - searches the directories listed in the P environment variable
and expands %i to the fully qualified name of the first one found.
If the environment variable name is not defined or the file is not
found by the search, then this modifier expands to the empty string.
модификаторы могут быть объединены для получения более сложных результатов:
%~dpi - expands %i to a drive letter and path only.
%~nxi - expands %i to a file name and extension only.
%~fsi - expands %i to a full path name with short names only.
%~dp$P:i - searches the directories listed in the P environment variable
for %i and expands to the drive letter and path of the first
one found.
%~ftzai - expands %i to a DIR like output line.
Если ваш исполняемый файл не по пути (как р сделайте свое редактирование), лучше всего использовать формат bare/subdirectory dir
, который сделает это за вас. Из корневого каталога:
dir /b /s ISTool.exe
доставит вам все файлы на этом диске с этим именем. Вам просто нужно проанализировать вывод. Мое предпочтение было бы использовать Cygwin's "find /cygdrive -name ISTool.exe"
, но это потому, что я уже установил его. Вы можете не хотеть этого (или даже иметь этот вариант).
Update:
Это dir /b /s
команда займет некоторое время, так как это в основном поиске всего диска. Если это проблема, вы можете рассмотреть возможность периодически создавать кэшированные записи всех файлов на всех дисках с CMD файл, например:
@echo off
setlocal enableextensions enabledelayedexpansion
del c:\files.cache.tmp >nul: 2>nul:
for %%d in (c d e) do (
cd /d %%d:\
dir /b /s >>c:\files.cache.tmp
)
del c:\files.cache >nul: 2>nul:
move c:\files.cache.tmp c:\files.cache
endlocal
Вы можете сделать это с помощью запланированных задач либо по ночам (для всегда на сервере) или при загрузке (для рабочего стола). Вы могли бы даже сделать скрипт более интеллектуальным, чтобы делать это только каждые пару дней (у меня есть сценарий автоматической резервной копии, который делает аналогичную вещь на семейных машинах, которые я поддерживаю). Это создает список во временном файле кеша, а затем перезаписывает исходный, чтобы гарантировать, что время, когда файл не существует, сведен к минимуму.
Тогда вы можете просто использовать:
findstr \\ISTool.exe c:\files.cache
, чтобы найти все файлы.
Не могли бы вы прояснить свою задачу? Вы хотите, скажем, получить «C: \ Program Files \ iTunes», если «iTunes» является входом? – Helen
Итак, в качестве ввода вы хотите дать «ISTool.exe», и это не путь? Вам придется искать весь диск для этого. - 'dir c: \ ISTool.exe/s/b' - вы можете вывести вывод туда, где бы вы ни находились, но если файл появляется более одного раза, у вас будет несколько строк для обработки - также, если пользователь имеет более одного диска, вам может понадобиться сканировать все (не уверен, что лучший способ получить все диски, возможно, WMI-запрос для несъемных дисков ...) - но это может занять много времени, даже с SSD - вам лучше сканировать 5 или 6 известных мест, в том числе% ProgramFiles% \ ISTool \ и% ProgramFiles (x86)% \ ISTool и т. д. – BrainSlugs83