Вы можете найти исполняемый файл по пути (или другой похожей на путь строке, если необходимо):
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.
Если ваш исполняемый файл находится не по пути (в соответствии с вашими правками), вам лучше всего использовать формат голого / подкаталога dir
, который сделает это за вас. Из корневого каталога:
dir /b /s ISTool.exe
выдаст вам все файлы на этом диске с этим именем. Затем вам просто нужно проанализировать вывод. Я бы предпочел использовать "find /cygdrive -name ISTool.exe"
от Cygwin, но это потому, что он у меня уже установлен. Вы можете этого не хотеть (или даже иметь такую возможность).
Обновление:
Эта команда 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
чтобы найти все ваши файлы.