アプリ版:「スタンプのみでお礼する」機能のリリースについて

DOSのバッチの初心者です。
$FILEという変数に、
C:\Documents and Settings\Administrator\My Documents\okwave.txt
のようにファイル名がフルパスで入ってくるとします。このファイル名だけ(okwave.txt)を別の変数に入れたいのですが、うまくいきません。

set f=%$FILE%
set g=%%~nf
echo %g%

上のように書いてみたのですが、変数gは%~nfという値が入ってしまいます。どう直せばよいでしょうか。

A 回答 (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 の第一パラメタとして与えられるので、これをパラメタ修飾子で分解すれば、ファイル名だけを取り出すことができます。
    • good
    • 0
この回答へのお礼

教えていただいた方法でできました!

>> 上のスクリプトは、下記に載っているような、バッチファイルのパラメタ修飾子を参考になされたと、思います。
 ​http://ykr414.com/dos/bat.html#05

そうです。そのサイトを見て書きました。そこではいろいろ勉強になったのですが、この件ではパラメータを使った例しか書いていなかったのです(本も読んでみましたが、やはりパラメータの例ばかり)。

変数の場合は、サブルーチンを使うとは!

とても助かりました。ありがとうございます。

お礼日時:2008/08/16 15:04

%%~nf のような修飾子は、同じバッチファイル内では、for文の変数か、call文の引数かで取り出すことが出来ます。


(No.1さんのように別のバッチの引数でも可)

ここではfor文を使う例です。

echo %$FILE%
for /F "delims=" %%F in ('echo %$FILE%') do set g=%%~nxF
echo %g%
    • good
    • 0
この回答へのお礼

meglin888です。レスありがとうございます。

for文はファイルを操作するものだと認識しておりましたが、こんなことにも使えるのですね。

ところでこのような技はどうすれば身につくのでしょう。個々のコマンドについての基本的な説明ですと、いい本やサイトがいっぱいあります。

しかしバッチファイルの書き方やこうした裏技?についてはどのあたりを見ればよいのでしょう。検討もつきません。

もしお勧めがありましたら、ぜひ教えてください。

お礼日時:2008/08/16 15:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!