Czy istnieje odpowiednik 'which' W wierszu poleceń systemu Windows?

Ponieważ czasami mam problemy ze ścieżką, gdzie jeden z moich własnych skryptów cmd jest ukryty (zacieniony) przez inny program (wcześniej na ścieżce), chciałbym być w stanie znaleźć pełną ścieżkę do programu w wierszu poleceń systemu Windows, podając tylko jego nazwę.

Czy istnieje odpowiednik polecenia UNIX 'which'?

W systemie UNIX, which command wyświetla pełną ścieżkę podanego polecenia, aby łatwo znaleźć i naprawić problemy z cieniem.

Author: Wolf, 2008-11-20

26 answers

Windows Server 2003 i nowsze (tj. wszystko po Windows XP 32 bit) zapewniają where.exe program, który wykonuje część tego, co robi which, chociaż pasuje do wszystkich typów plików, nie tylko poleceń wykonywalnych. (Nie pasuje do wbudowanych poleceń powłoki, takich jak cd.) Będzie nawet akceptował symbole wieloznaczne, więc where nt* znajdzie wszystkie pliki w twoim %PATH% i bieżącym katalogu, których nazwy zaczynają się od nt.

Spróbuj where /? o pomoc.

Zauważ, że Windows PowerShell definiuje where jako alias dla Where-Object cmdlet, więc jeśli chcesz where.exe, musisz wpisać pełną nazwę zamiast pomijać rozszerzenie .exe.

 2669
Author: Michael Ratanapintha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-08 07:39:35

Podczas gdy późniejsze wersje systemu Windows mają polecenie where, możesz to zrobić również w systemie Windows XP, używając modyfikatorów zmiennych środowiskowych, w następujący sposób:

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

Nie potrzebujesz żadnych dodatkowych narzędzi i nie jest to ograniczone do PATH, ponieważ możesz zastąpić dowolną zmienną środowiskową (oczywiście w formacie ścieżki), której chcesz użyć.


I jeśli chcesz mieć takie, które obsługują wszystkie rozszerzenia w PATHEXT (tak jak robi to sam Windows), To ten robi sztuczkę:

@echo off
setlocal enableextensions enabledelayedexpansion

:: Needs an argument.

if "x%1"=="x" (
    echo Usage: which ^<progName^>
    goto :end
)

:: First try the unadorned filenmame.

set fullspec=
call :find_it %1

:: Then try all adorned filenames in order.

set mypathext=!pathext!
:loop1
    :: Stop if found or out of extensions.

    if "x!mypathext!"=="x" goto :loop1end

    :: Get the next extension and try it.

    for /f "delims=;" %%j in ("!mypathext!") do set myext=%%j
    call :find_it %1!myext!

:: Remove the extension (not overly efficient but it works).

:loop2
    if not "x!myext!"=="x" (
        set myext=!myext:~1!
        set mypathext=!mypathext:~1!
        goto :loop2
    )
    if not "x!mypathext!"=="x" set mypathext=!mypathext:~1!

    goto :loop1
:loop1end

:end
endlocal
goto :eof

:: Function to find and print a file in the path.

:find_it
    for %%i in (%1) do set fullspec=%%~$PATH:i
    if not "x!fullspec!"=="x" @echo.   !fullspec!
    goto :eof

It w rzeczywistości zwraca wszystkie możliwości, ale można go łatwo dostosować do określonych reguł wyszukiwania.

 298
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-23 03:49:37

Pod PowerShell, Get-Command znajdzie pliki wykonywalne w dowolnym miejscu $Env:PATH.

Get-Command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

Znajduje również cmdlety PowerShell, funkcje, aliasy, pliki z niestandardowymi rozszerzeniami wykonywalnymi za pomocą $Env:PATHEXT, itp. zdefiniowany dla bieżącej powłoki (dość podobny do Basha type -a foo) - dzięki czemu jest lepszy niż inne narzędzia, takie jak where.exe, which.exe, itp, które nie są świadome tych poleceń PowerShell.

Znajdowanie plików wykonywalnych przy użyciu tylko części nazwy

gcm *disk*

CommandType     Name                             Version    Source
-----------     ----                             -------    ------
Alias           Disable-PhysicalDiskIndication   2.0.0.0    Storage
Alias           Enable-PhysicalDiskIndication    2.0.0.0    Storage
Function        Add-PhysicalDisk                 2.0.0.0    Storage
Function        Add-VirtualDiskToMaskingSet      2.0.0.0    Storage
Function        Clear-Disk                       2.0.0.0    Storage
Cmdlet          Get-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          New-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          Remove-PmemDisk                  1.0.0.0    PersistentMemory
Application     diskmgmt.msc                     0.0.0.0    C:\WINDOWS\system32\diskmgmt.msc
Application     diskpart.exe                     10.0.17... C:\WINDOWS\system32\diskpart.exe
Application     diskperf.exe                     10.0.17... C:\WINDOWS\system32\diskperf.exe
Application     diskraid.exe                     10.0.17... C:\WINDOWS\system32\diskraid.exe
...

Finding custom executables

Aby znaleźć inne pliki wykonywalne spoza windows (python, ruby, perl, itp.), rozszerzenia plików dla tych plików wykonywalnych muszą być dodane do zmiennej środowiskowej PATHEXT (domyślnie .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL), aby zidentyfikować pliki z tymi rozszerzeniami w PATH jako wykonywalne. Ponieważ Get-Command również honoruje tę zmienną, można ją rozszerzyć o listę niestandardowych plików wykonywalnych. np.

$Env:PATHEXT="$Env:PATHEXT;.dll;.ps1;.psm1;.py"     # temporary assignment, only for this shell's process

gcm user32,kernel32,*WASM*,*http*py

CommandType     Name                        Version    Source
-----------     ----                        -------    ------
ExternalScript  Invoke-WASMProfiler.ps1                C:\WINDOWS\System32\WindowsPowerShell\v1.0\Invoke-WASMProfiler.ps1
Application     http-server.py              0.0.0.0    C:\Users\ME\AppData\Local\Microsoft\WindowsApps\http-server.py
Application     kernel32.dll                10.0.17... C:\WINDOWS\system32\kernel32.dll
Application     user32.dll                  10.0.17... C:\WINDOWS\system32\user32.dll

Możesz szybko skonfigurować alias za pomocą sal which gcm (krótka forma set-alias which get-command).

Więcej informacji i przykładów można Znalezione w dziale Pomoc online dla Get-Command.

 173
Author: shalomb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-06 22:23:06

W Windows PowerShell:

set-alias which where.exe
 63
Author: cmcginty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:45:12

Jeśli masz zainstalowany PowerShell (co polecam), możesz użyć następującego polecenia jako przybliżonego odpowiednika (zastąp nazwę programu dla nazwy pliku wykonywalnego):

($Env:Path).Split(";") | Get-ChildItem -filter programName*

Więcej jest tutaj: Mój Manwich! PowerShell Który

 41
Author: RexE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:03:57

Narzędzia GnuWin32 mają which, wraz z całą mnóstwem innych narzędzi uniksowych.

 37
Author: Ferruccio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 06:44:18

W Windows CMD which wywołania where:

$ where php
C:\Program Files\PHP\php.exe
 26
Author: automatix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-01 12:02:00

Cygwin jest rozwiązaniem. Jeśli nie masz nic przeciwko korzystaniu z rozwiązań innych firm, Cygwin jest dobrym rozwiązaniem.

Cygwin daje Ci komfort *nix w środowisku Windows (i możesz go używać w powłoce poleceń Windows lub użyć wybranej powłoki *nix). Daje Ci cały host poleceń *nix (takich jak which) Dla Windows, i możesz po prostu dołączyć ten katalog do swojego PATH.

 17
Author: palswim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:44:51

W PowerShell jest to gcm, które daje sformatowane informacje o innych poleceniach. Jeśli chcesz pobrać tylko ścieżkę do pliku wykonywalnego, użyj .Source.

Na przykład: gcm git lub (gcm git).Source

Ciekawostki:

 12
Author: vulcan raven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 11:32:27

Mam funkcję w moim profilu PowerShell o nazwie 'which'

function which {
    get-command $args[0]| format-list
}

Oto jak wygląda Wyjście:

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:
 11
Author: Fez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-31 08:59:57

Idź po unxutils stąd: http://sourceforge.net/projects/unxutils/

Gold na platformach windows, umieszcza wszystkie ładne narzędzia unix na standardowym Windows DOS. Używam go od lat.

Zawiera "które". Pamiętaj jednak, że rozróżnia się wielkość liter.

NB: aby go zainstalować należy gdzieś rozpakować zip i dodać ...\UnxUtils \ usr \ local \ wbin \ do zmiennej ENV ścieżki systemowej.

 10
Author: Jon Court,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 15:00:31

Jeśli znajdziesz kompilator wolnego Pascala, możesz to skompilować. Przynajmniej działa i pokazuje algorytm niezbędny.

program Whence (input, output);
  Uses Dos, my_funk;
  Const program_version = '1.00';
        program_date    = '17 March 1994';
  VAR   path_str          : string;
        command_name      : NameStr;
        command_extension : ExtStr;
        command_directory : DirStr;
        search_dir        : DirStr;
        result            : DirStr;


  procedure Check_for (file_name : string);
    { Check existence of the passed parameter. If exists, then state so   }
    { and exit.                                                           }
  begin
    if Fsearch(file_name, '') <> '' then
    begin
      WriteLn('DOS command = ', Fexpand(file_name));
      Halt(0);    { structured ? whaddayamean structured ? }
    end;
  end;

  function Get_next_dir : DirStr;
    { Returns the next directory from the path variable, truncating the   }
    { variable every time. Implicit input (but not passed as parameter)   }
    { is, therefore, path_str                                             }
    var  semic_pos : Byte;

  begin
      semic_pos := Pos(';', path_str);
      if (semic_pos = 0) then
      begin
        Get_next_dir := '';
        Exit;
      end;

      result := Copy(Path_str, 1, (semic_pos - 1));  { return result   }
      { Hmm! although *I* never reference a Root drive (my directory tree) }
      { is 1/2 way structured), some network logon software which I run    }
      { does (it adds Z:\ to the path). This means that I have to allow    }
      { path entries with & without a terminating backslash. I'll delete   }
      { anysuch here since I always add one in the main program below.     }
      if (Copy(result, (Length(result)), 1) = '\') then
         Delete(result, Length(result), 1);

      path_str := Copy(path_str,(semic_pos + 1),
                       (length(path_str) - semic_pos));
      Get_next_dir := result;
  end;  { Of function get_next_dir }

begin
  { The following is a kludge which makes the function Get_next_dir easier  }
  { to implement. By appending a semi-colon to the end of the path         }
  { Get_next_dir doesn't need to handle the special case of the last entry }
  { which normally doesn't have a semic afterwards. It may be a kludge,    }
  { but it's a documented kludge (you might even call it a refinement).    }
  path_str := GetEnv('Path') + ';';

  if (paramCount = 0) then
  begin
    WriteLn('Whence: V', program_version, ' from ', program_date);
    Writeln;
    WriteLn('Usage: WHENCE command[.extension]');
    WriteLn;
    WriteLn('Whence is a ''find file''type utility witha difference');
    Writeln('There are are already more than enough of those :-)');
    Write  ('Use Whence when you''re not sure where a command which you ');
    WriteLn('want to invoke');
    WriteLn('actually resides.');
    Write  ('If you intend to invoke the command with an extension e.g ');
    Writeln('"my_cmd.exe param"');
    Write  ('then invoke Whence with the same extension e.g ');
    WriteLn('"Whence my_cmd.exe"');
    Write  ('otherwise a simple "Whence my_cmd" will suffice; Whence will ');
    Write  ('then search the current directory and each directory in the ');
    Write  ('for My_cmd.com, then My_cmd.exe and lastly for my_cmd.bat, ');
    Write  ('just as DOS does');
    Halt(0);
  end;

  Fsplit(paramStr(1), command_directory, command_name, command_extension);
  if (command_directory <> '') then
  begin
WriteLn('directory detected *', command_directory, '*');
    Halt(0);
  end;

  if (command_extension <> '') then
  begin
    path_str := Fsearch(paramstr(1), '');    { Current directory }
    if   (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
    else
    begin
      path_str := Fsearch(paramstr(1), GetEnv('path'));
      if (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
                          else Writeln('command not found in path.');
    end;
  end
  else
  begin
    { O.K, the way it works, DOS looks for a command firstly in the current  }
    { directory, then in each directory in the Path. If no extension is      }
    { given and several commands of the same name exist, then .COM has       }
    { priority over .EXE, has priority over .BAT                             }

    Check_for(paramstr(1) + '.com');     { won't return if file is found }
    Check_for(paramstr(1) + '.exe');
    Check_for(paramstr(1) + '.bat');

    { Not in current directory, search through path ... }

    search_dir := Get_next_dir;

    while (search_dir <> '') do
    begin
       Check_for(search_dir + '\' + paramstr(1) + '.com');
       Check_for(search_dir + '\' + paramstr(1) + '.exe');
       Check_for(search_dir + '\' + paramstr(1) + '.bat');
       search_dir := Get_next_dir;
    end;

    WriteLn('DOS command not found: ', paramstr(1));
  end;
end.
 10
Author: Mawg says reinstate Monica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:42:49

Nie w systemie Windows, ale jest dostarczany przez Services for Unix i istnieje kilka prostych skryptów wsadowych, które wykonują to samo, takie jak ten ten .

 8
Author: Robert Gamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 04:28:14

Najlepszą wersją tego, jaką znalazłem na Windows, jest narzędzie "whereis" Josepha Newcomera, które jest dostępne (ze źródłem) z jego strony.

Artykuł o rozwoju "whereis" warto przeczytać.

 7
Author: Tim Lesher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 05:09:19

Żaden z portów Win32 Unixa, które znalazłem w Internecie, nie jest satystactory, ponieważ wszystkie mają jedną lub więcej z tych wad:

  • Brak wsparcia dla zmiennej Windows PATHEXT. (Która definiuje listę rozszerzeń domyślnie dodanych do każdego polecenia przed skanowaniem ścieżki i w jakiej kolejności.) (Używam wielu skryptów tcl i nie ma publicznie dostępnych narzędzi, które mogłyby je znaleźć.)
  • Brak wsparcia dla cmd.strony kodu exe, co sprawia, że wyświetlają ścieżki z niepoprawne znaki inne niż ascii. (Jestem bardzo wrażliwy na to, z ç w moim pierwszym imieniu: -))
  • Brak wsparcia dla odrębnych reguł wyszukiwania w cmd.exe i wiersz poleceń PowerShell. (Żadne publicznie dostępne narzędzie nie znajdzie skryptów .ps1 w oknie PowerShell, ale nie w oknie cmd!)

Więc w końcu napisałem swój własny, który, że suports wszystkie powyższe poprawnie.

Dostępne tam: http://jf.larvoire.free.fr/progs/which.exe

 6
Author: Jean-François Larvoire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-18 13:29:59

Ten plik wsadowy używa obsługi zmiennej CMD, aby znaleźć polecenie, które zostanie wykonane w ścieżce. Uwaga: bieżący katalog jest zawsze wykonywany przed ścieżką) i w zależności od tego, które wywołanie API jest używane, inne lokalizacje są przeszukiwane przed / po ścieżce.

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

Zobacz set /? po pomoc.

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-25 01:45:38

Możesz najpierw zainstalować Git z Pobieranie Git, Następnie otwórz Git Bash i wpisz:

which app-name
 6
Author: hamidreza samsami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:53:42

Używam Gow (GNU na Windows), który jest lekką wersją Cygwina. Możesz pobrać go z GitHub tutaj .

Gow (GNU na Windows) jest lekką alternatywą dla Cygwina. Wykorzystuje wygodny Instalator Windows, który instaluje około 130 przydatne aplikacje open source Unix skompilowane jako natywne win32 / align = "left" / Ma być jak najmniejszy, około 10 MB, jak w przeciwieństwie do Cygwina, który w zależności od opcje. - O Opisie (Brent R. Matzelle)

Zrzut ekranu z listą poleceń zawartych w GOW:

Tutaj wpisz opis obrazka

 6
Author: Prayson W. Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:55:37

Stworzyłem narzędzie podobne do Ned Batchelder:

Szukam .dll i .pliki exe w ścieżce

Podczas gdy moje narzędzie jest przede wszystkim do wyszukiwania różnych wersji dll pokazuje więcej informacji (Data, Rozmiar, wersja), ale nie używa PATHEXT (mam nadzieję zaktualizować moje narzędzie wkrótce).

 5
Author: Michał Niklas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 09:39:21

Wystarczy wrzucić ten plik wsadowy Windows' a:

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

Test:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\\ssh.EXE

Nie do końca jednolinijkowy, jeśli zawijasz kod w setlocal enableextensions i endlocal.

 5
Author: bobbogo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-08 11:37:56

Dla użytkowników Windows XP (którzy nie mają wbudowanego polecenia where), napisałem polecenie "gdzie jak" jako rubygem o nazwie whichr.

Aby go zainstalować, Zainstaluj Ruby.

Then

gem install whichr

Uruchom go jak:

C: > whichr cmd_here

 4
Author: rogerdpack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-13 21:52:14

TCC i TCC / LE firmy JPSoft to CMD.Zamienniki EXE, które dodają znaczącą funkcjonalność. which jest wbudowanym poleceniem dla procesorów z rodziny TCC.

 3
Author: David G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-09 23:31:11

Od dłuższego czasu używam modułu which z npm i działa bardzo dobrze: https://www.npmjs.com/package/which Jest to świetna alternatywa dla wielu platform.

Teraz przełączyłem się na which, który jest dostarczany z Gitem. Po prostu dodaj do swojej ścieżki /usr/bin ścieżkę z Gita, która zwykle znajduje się w C:\Program Files\Git\usr\bin\which.exe. Wartość binarna which będzie równa C:\Program Files\Git\usr\bin\which.exe. Jest szybszy i działa zgodnie z oczekiwaniami.

 2
Author: Giovanni Bassi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-01 02:02:25

Spróbuj tego

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-03 13:00:18

Możliwe jest pobranie wszystkich komend Uniksa skompilowanych Dla Windows, w tym which z repozytorium GitHub: https://github.com/George-Ogden/UNIX

 0
Author: George Ogden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 17:44:52

Oto funkcja, którą zrobiłem, aby znaleźć wykonywalne polecenie podobne do polecenia Uniksa 'WHICH'

App_path_func.cmd:

@ECHO OFF
CLS

FOR /F "skip=2 tokens=1,2* USEBACKQ" %%N IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%~1" /t REG_SZ  /v "Path"`) DO (
 IF /I "%%N" == "Path" (
  SET wherepath=%%P%~1
  GoTo Found
 )
)

FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe %~1`) DO (
 SET wherepath=%%F
 GoTo Found
)

FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES%" %~1`) DO (
 SET wherepath=%%F
 GoTo Found
)

FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES(x86)%" %~1`) DO (
 SET wherepath=%%F
 GoTo Found
)

FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%WINDIR%" %~1`) DO (
 SET wherepath=%%F
 GoTo Found
)

:Found
SET %2=%wherepath%
:End

Test:

@ECHO OFF
CLS

CALL "app_path_func.cmd" WINWORD.EXE PROGPATH
ECHO %PROGPATH%

PAUSE

Wynik:

C:\Program Files (x86)\Microsoft Office\Office15\
Press any key to continue . . .

Https://www.freesoftwareservers.com/display/FREES/Find+Executable+via+Batch+-+Microsoft+Office+Example+-+WINWORD+-+Find+Microsoft+Office+Path

 -1
Author: FreeSoftwareServers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-06 03:38:54