【お題】環境変数からファイル名や拡張子を自由に取り出す方法


バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法

ふか 2011/02/02 13:21
これって引数ではない普通の環境変数ではできませんか?

お題もらいました。
バッチファイル、コマンドプロンプト環境変数を展開したいとな。




「%~修飾子引数」だから、素直にやろうとすると、ドライブ文字だけに展開するならこうだよな。

c:\>echo %~dWINDIR%
%~dWINDIR%

c:\>echo %~d%WINDIR%
%~dC:\WINDOWS

両方だめだ。




あれこれ順番を入れ替えてみる

c:\>echo %WINDIR~d%
%WINDIR~d%


c:\>echo %WINDIR%~d
C:\WINDOWS~d


c:\>echo %WINDIR%%~d
C:\WINDOWS%~d

全部ダメ


set /?に載ってる置換で試す

c:\>echo %WINDIR:~d%
%WINDIR:~d%


c:\>echo %WINDIR:~d%WINDIR%%
%WINDIR:~dC:\WINDOWS%


c:\>echo %WINDIR:~d%%
%WINDIR:~d%%

ダメやね。




( ̄~ ̄;) ウーン
for文を使ったこの方法しか思いつかんな。

c:\>for /F %i IN  ('echo %WINDIR%') DO echo %~di

c:\>echo C:
C:

これなら、環境変数を引数にして渡したほうが楽かな。


スマートな方法をご存じの方教えてください。


バッチを吐き出すなんて方法もありか。

@set temp_cmd=%~dp0temp.cmd
@echo @set result=%%~d1 >"%temp_cmd%"
@call "%temp_cmd%" %WINDIR%
@del "%temp_cmd%"
@echo %result%

気になるモノ




ドナルド・A. ノーマン、野島 久雄、D.A. ノーマン

価格: ¥ 3,465
価格は記載時点のものです。購入前にAmazonでご確認ください。