Top > システム > バッチファイル

バッチファイルでLINUXの「which」風コマンドを実現させる Edit

LINUXにはwhichというコマンドの呼び出し元ファイルのパスを表示させる機能があります。
しかしWindowsのコマンドプロンプト(DOS)にはこれに相当するコマンドが存在しません。
ということなので、バッチファイルで同じような機能を実現させます。
以下手順です。

  1. filewhich.bat というバッチファイル名で、中身は↓な感じにします。
    (↑を直接ダウンロードしてもokです)
    @echo off
    
    rem linuxのwhich風コマンド
    rem 引数1 : 調べたいコマンド名
    
    rem 引数が無いとき
    if "%~1"=="" (
    	echo 指定したコマンドの元ファイルがどこに存在するかを表示します。
    	echo.
    	echo which.bat [調べたいコマンド名]
    	echo.
    	exit/b
    )
    
    setlocal
    
    rem ファイルそのものが存在しているとき
    if exist %~1 (
    	set f=%~f1
    	goto end
    )
    
    rem エイリアスの探索
    for /f "delims== tokens=1,*" %%i in ('doskey /macros') do (
    	if "%%i"=="%~1" set f=%%j & goto end
    )
    
    rem 拡張子があるとき
    if not "%~x1"=="" (
    	set f=%~f$PATH:1
    	goto end
    )
    
    rem 拡張子を付与してカレントディレクトリの探索
    for %%e in (%PATHEXT%) do (
    	if exist %~1%%e call :full_path %~1%%e & goto end
    )
    
    rem 拡張子を付与して環境変数PATHの探索
    for %%e in (%PATHEXT%) do (
    	call :search_path %~1%%e
    	if errorlevel 1 goto end
    )
    set f=
    goto end
    
    :full_path
    set f=%~f1
    exit/b
    
    :search_path
    set f=%~$PATH:1
    if "%f%"=="" exit/b 0
    exit/b 1
    
    rem 結果を表示
    :end
    echo %1=%f%
    endlocal
  2. どこからでもwhichコマンドが使えるように、ダウンロードしたwhich.batをPATHの通ったフォルダにコピーします。
    何も考えなければ「C:\WINDOWS」辺りで問題無いとおもいます。
  3. あとはコマンドプロンプトを立ち上げて
    which notepad
    などと打ち込むと、
    notepad=C:\WINDOWS\system32\notepad.exe
    と表示されることが確認できると思います。
    第1引数に、調べたいコマンドを指定してください。

添付ファイル: filewhich.bat 722件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2013-06-24 (月) 18:26:45 (1555d)