- ベストアンサー
DOSのバッチで、変数中のファイル名を取り出すには
DOSのバッチの初心者です。 $FILEという変数に、 C:\Documents and Settings\Administrator\My Documents\okwave.txt のようにファイル名がフルパスで入ってくるとします。このファイル名だけ(okwave.txt)を別の変数に入れたいのですが、うまくいきません。 set f=%$FILE% set g=%%~nf echo %g% 上のように書いてみたのですが、変数gは%~nfという値が入ってしまいます。どう直せばよいでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> set f=%$FILE% > set g=%%~nf > echo %g% 上のスクリプトは、下記に載っているような、バッチファイルのパラメタ修飾子を参考になされたと、思います。 http://ykr414.com/dos/bat.html#05 これらは、バッチファイル起動時に与えられたパラメタに対する修飾子であり、バッチ変数に対するものではありません。 ここでは、 batch01.bat と batch02.bat という二つのスクリプトを作成します。 batch02.bat では、 @echo off echo %~n1%~x1 batch01.bat では、 @echo off call test02.bat "%$FILE%" 以上のようにすれば、 $FILE 変数が batch02.bat の第一パラメタとして与えられるので、これをパラメタ修飾子で分解すれば、ファイル名だけを取り出すことができます。
その他の回答 (1)
- pita-gora
- ベストアンサー率70% (102/145)
%%~nf のような修飾子は、同じバッチファイル内では、for文の変数か、call文の引数かで取り出すことが出来ます。 (No.1さんのように別のバッチの引数でも可) ここではfor文を使う例です。 echo %$FILE% for /F "delims=" %%F in ('echo %$FILE%') do set g=%%~nxF echo %g%
お礼
meglin888です。レスありがとうございます。 for文はファイルを操作するものだと認識しておりましたが、こんなことにも使えるのですね。 ところでこのような技はどうすれば身につくのでしょう。個々のコマンドについての基本的な説明ですと、いい本やサイトがいっぱいあります。 しかしバッチファイルの書き方やこうした裏技?についてはどのあたりを見ればよいのでしょう。検討もつきません。 もしお勧めがありましたら、ぜひ教えてください。
お礼
教えていただいた方法でできました! >> 上のスクリプトは、下記に載っているような、バッチファイルのパラメタ修飾子を参考になされたと、思います。 http://ykr414.com/dos/bat.html#05 そうです。そのサイトを見て書きました。そこではいろいろ勉強になったのですが、この件ではパラメータを使った例しか書いていなかったのです(本も読んでみましたが、やはりパラメータの例ばかり)。 変数の場合は、サブルーチンを使うとは! とても助かりました。ありがとうございます。