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

#contents
#setlinebreak(on)

*バッチファイルでLINUXの「which」風コマンドを実現させる [#v2719a17]
LINUXにはwhichというコマンドの呼び出し元ファイルのパスを表示させる機能があります。
しかしWindowsのコマンドプロンプト(DOS)にはこれに相当するコマンドが存在しません。
そこで、バッチファイルで同じようなコマンドを作ることにします。
+&attachref(which.bat); をダウンロードしてください。
ということなので、バッチファイルで同じような機能を実現させます。
以下手順です。

+&attachref(which.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
+どこからでもwhichコマンドが使えるように、ダウンロードしたwhich.batをPATHの通ったフォルダにコピーします。
何も考えなければ「C:\WINDOWS」辺りで問題無いとおもいます。
+あとはコマンドプロンプトを立ち上げて
 which notepad
などと打ち込むと、
 notepad=C:\WINDOWS\system32\notepad.exe
と表示されることが確認できると思います。
第1引数に、調べたいコマンドを指定してください。


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS