1. ホーム
  2. batch-file

[解決済み】バッチファイルで部分文字列を実行する最適な方法は?

2022-04-10 22:58:59

質問

現在実行中のバッチファイル名を取得したい がない場合 拡張子

ありがとうございます このリンク ファイル名は しかし、バッチファイル内で部分文字列を実行する最良の方法は何でしょうか?

または、拡張子なしでファイル名を取得する他の方法はありますか?

このシナリオでは、3文字の拡張子を想定しておくのが無難です。

どのように解決するのですか?

バッチファイル名を取得するための一番簡単な方法は %~n0 .

@echo %~n0

で呼び出されたサブルーチンで実行されない限り)、現在実行中のバッチファイルの名前(拡張子なし)を出力します。 call ). このようなパス名に対する「特別な」置換の完全なリストは、以下のようになります。 help for ヘルプの一番最後にあります。

<ブロッククオート

また、FOR 変数参照が強化されました。 以下のオプションが使用できるようになりました。 の構文があります。

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

修飾子を組み合わせることで 複合的な結果を得ることができます。

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only

しかし、ご質問に正確にお答えすると サブストリングは :~start,length という表記があります。

%var:~10,5%

は、環境変数の 10 の位置から 5 文字を取り出します。 %var% .

NOTE 文字列のインデックスはゼロベースなので、最初の文字が0番、2番が1番といった具合です。

のような引数変数の部分文字列を取得するには %0 , %1 を使用して、通常の環境変数に代入する必要があります。 set を最初に設定します。

:: Does not work:
@echo %1:~10,5

:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%

構文がさらに強力になります。

  • %var:~-7% から最後の7文字を抽出します。 %var%
  • %var:~0,-4% は最後の4文字を除いたすべての文字を抽出し、ファイル拡張子も取り除きます(ピリオドの後の3文字が [ . ]).

参照 help set は、その構文の詳細について説明します。