można zlokalizować plik wykonywalny na ścieżce (lub inny ciąg ścieżki, jak w razie potrzeby):
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
Szczegóły można znaleźć na końcu tekstu pomocy dla polecenia "for"
, "for /?"
ale podsumowanie jest:
%~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.
modyfikatory mogą być łączone w celu uzyskania złożonych wyników:
%~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.
Jeśli plik wykonywalny nie znajduje się na ścieżce (jako P er Twoja edycja), najlepiej jest użyć formatu bare/subdirectory z dir
, który zrobi to za ciebie. Z katalogu głównego:
dir /b /s ISTool.exe
dostaniesz wszystkie pliki na tym dysku o tej nazwie. Następnie wystarczy przeanalizować wynik. Moja własna preferencja polega na użyciu Cygwin's "find /cygdrive -name ISTool.exe"
, ale to dlatego, że już go zainstalowałem. Możesz tego nie chcieć (lub nawet mieć taką opcję).
Aktualizacja:
To polecenie dir /b /s
zajmie trochę czasu, ponieważ w zasadzie przeszukiwania całego dysku. Jeśli jest to problem może chcesz okresowo rozważyć utworzenie pamięci podręcznej zapis wszystkich plików na wszystkich dyskach z pliku cmd jak:
@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
Można to zrobić z zaplanowanych zadań albo nocnej (za zawsze na serwerze) lub podczas rozruchu (na pulpicie). Możesz nawet uczynić skrypt bardziej inteligentnym, aby robił to tylko co kilka dni (mam zautomatyzowany skrypt tworzenia kopii zapasowych, który robi to samo na rodzinnych maszynach, które obsługuję). Spowoduje to utworzenie listy w tymczasowym pliku pamięci podręcznej, a następnie nadpisanie oryginalnej, aby zapewnić, że czas, w którym plik nie istnieje, zostanie zminimalizowany.
Następnie można po prostu użyć:
findstr \\ISTool.exe c:\files.cache
zlokalizować wszystkie pliki.
Czy możesz wyjaśnić swoje zadanie? Czy chcesz na przykład wprowadzić "C: \ Program Files \ iTunes" jako "dane wejściowe"? – Helen
Tak więc, jako dane wejściowe, które chcesz podać "ISTool.exe" i nie ma go na ścieżce? Musiałbyś przeszukać cały dysk. - 'dir c: \ ISTool.exe/s/b' - możesz wyprowadzać dane wyjściowe do dowolnego miejsca, ale jeśli plik pojawi się więcej niż jeden raz, będziesz miał do wyboru wiele linii - także, jeśli użytkownik ma więcej niż jeden dysk, który możesz przeskanować wszystkie (nie wiesz, jaki jest najlepszy sposób na uzyskanie wszystkich dysków, może kwerendy WMI dla dysków niewymiennych ...) - ale to może potrwać wieki, nawet z dyskiem SSD - lepiej skanować 5 lub 6 znanych lokalizacji, w tym% ProgramFiles% \ ISTool \ and% ProgramFiles (x86)% \ ISTool, itp. – BrainSlugs83