【MS-DOS】【コマンドプロンプト】パス文字列からファイル名だけを取得

なにこれ?ってなったのでメモ

参考:

pgkiss.web.fc2.com

↑のは、バッチパラメータ(%1とか)やforループの一時変数?(%%iとか)でしか使えない?

このやりかたでたとえばc:\work\test.txtから

拡張子除くファイル名だけを抽出(※.batファイルは%が2つ)

for %i in ( c:\work\test.txt ) do echo %~ni

拡張子とファイル名を抽出(※.batファイルは%が2つ)

for %i in ( c:\work\test.txt ) do  echo %~nxi

という、繰り返すわけでもないのにfor使う非常にキモい構文になった。 (しかもファイルがない場合はエラーではなくスキップ) 他に方法ないの?