De onde está sendo executado ?

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

De onde está sendo executado ?

Mensagem por Pablo César »

Este é um arquivo BATCH muito útil, principalmente para aqueles que na linha de comando, querem saber de onde está sendo executado determinado arquivo. Basta colocar o WHICH.BAT no path do Windows (\windows\system32, por exemplo) e passar o parâmetro, exemplo:

WHICH NOTEPAD

E vai dizer onde está localizado o NOTEPAD.EXE e se colocar como parâmetro por exemplo:

WHICH DEL

Vai retornar dizendo que é um comando interno. Este é uma batch que disponibilizo para todos conhecerem que acho que poderá ser útil em algumas ocasiões onde executamos algo e que está repetido em outro lugar que esteja utilizando a variável PATH do sistema. Claro que não irá ter sentido utilizar o utilitário com o caminho completo do arquivo, mas ele funciona bem e é interessante a técnica utilizada.

Código: Selecionar todos

@echo off
rem Windows 2000/XP version of WHICH.BAT
rem Copyright 2004 (c) Richard Pasco
rem Known limitation: Fails if PATH includes quotation marks

rem Check Syntax
if %1.==. (
  echo Syntax: %0 command
  goto end
)

rem DOSKEY macros supersede internal commands
for /f "tokens=1,* delims==" %%v in ('doskey.exe /macros') do (
  if /i %%v==%1 (
    echo "%%v" is a DOSKEY macro for "%%w"
    goto end
  )
)

rem Check Internal Commands
for %%i in (ASSOC BREAK CALL CD CHCP CHDIR CLS COPY COLOR DATE DEL DIR
  ECHO ENDLOCAL ERASE EXIT FOR FTYPE GOTO IF MD MKDIR PATH PAUSE POPD
  PUSHD PROMPT RD REM REN RENAME RMDIR SET SETLOCAL SHIFT START TIME
  TYPE VER VERIFY VOL) do (
  if /i %1==%%i (
    echo %%i is an internal command
    goto end
  )
)

rem Look in the currend directory, then on the path
set which_temp=.;%path%
:loop
for /f "tokens=1,* delims=;" %%p in ("%which_temp%") do (
  set which_temp=%%q
  for %%e in (%pathext%) do (
    if exist "%%p"\%1 (
      for %%n in (%1) do (
        if /i %%~xn==%%e (
          set result="%%p\%1"
          goto found
        )
      )
    )
    if exist "%%p\%1%%e" (
      set result="%%p\%1%%e"
      goto found
    )
  )
)
if not "%which_temp%"=="" goto loop
echo Command "%1" not found.
goto end
:found
set which_temp=
rem Fix capitalization of found file
for %%r in (%result%) do echo %%~fr %%~tr %%~zr bytes
set result=
:end
Diz que funciona em XP, 2000 pelo autor, mas também funciona em WIN98 outras versões não testei, mas acredito que funcionará também.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder