.bat / .cmdファイルで文字列のサブ文字列を取得する方法はありますか?
たとえば、文字列「hello.txt」が与えられた場合、.txtを削除する方法はありますか?
編集:これを行うためのより一般的な方法はありますか?それがファイル名またはファイルパスであるという仮定の下ではありませんか?
.bat / .cmdファイルで文字列のサブ文字列を取得する方法はありますか?
たとえば、文字列「hello.txt」が与えられた場合、.txtを削除する方法はありますか?
編集:これを行うためのより一般的な方法はありますか?それがファイル名またはファイルパスであるという仮定の下ではありませんか?
これがパラメーターとして渡されたファイルである場合、次のように %~n1 を使用できます。
test.bat
----------
echo %~n1 %~n2
c:\> test.bat myfile.txt my.long.file.bat
myfile my.long.file
文字列の長さがわかっている場合は、部分文字列演算子を使用できます。
echo %variable:0,4% => "test.txt" => "test"
最後の 4 文字を除くすべてを取得するには、次のようにします。
echo %variable:~0,-4% => "file...name.txt" => "file...name"
.cmd ファイル (および Win95 以降の .bat ファイル) の一般的な部分文字列構文は次のとおりです。
%変数:~num_chars_to_skip,num_chars_to_keep%
このページにはその他のオプションがあります: VarSubstring
部分文字列やその他の興味深い「変数置換」方法については、次の方法でヘルプを取得できます。
設定 /?
文字列の解析 (文字列内の '.' の検索など) については、次を試してください。
為に /?
最善の方法は、python (または perl) をインストールすることです。信じてください、私はほとんどすべてを試しましたが、'DOS' (または実際にはその他のもの) でテキスト操作を行うのは頭痛の種です。
help set
cmd.exe で使用できる文字列処理を試してください。set のヘルプには、「set」コマンド以外で通常できることが含まれています。
次のようなことができます
set source=hello.txt
REM print hello
echo %source:~0,-4%
REM print o.t
echo %source:~4,3%
REM print help.txt
echo %source:lo=p%
REM etc
echo %source:llo=%
上記の「コード」に問題がある可能性があります。私はメモリから書いていますが、近くでテストできる cmd.exe はありません。
ファイルおよびディレクトリベースの特定の部分文字列情報も取得するための呼び出し (call /?) のドキュメントを参照することもできます。
任意の文字列については、そうは思いません。
この例では、%~n1
は拡張子のない名前に解決されます。