ループ内でFOR
、必要になります
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION
また
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION
BECAUSE %line%
(または任意の%
var %
) は、変数の PARSE-TIME 値、つまり、FOR
実行が開始される前の値を意味します。!
var!
は の RUN-TIME 値var
、つまりループ中に変化する値を意味しますが、 が実行された場合のみsetlocal enabledelayedexpansion
(この場合は実行されています)
=
2 番目の前にも注意してください!
。これにより、変数に置換文字列が導入されます。これは、ターゲット ( と の間:
)を置換する文字列であり、構造体は[nothing] に置換された任意の文字列=
で の値を計算します。line
subversion
%%a
また、行の の後に末尾のスペースがあることに注意してくださいset line=%%a
。あなたが投稿したものは古典的に正しいように見えますが、末尾のスペースは割り当てられた値に含まれているため%%a
、!line!
同じものではありません。enclose-the-statement-in-quotes メソッドにより、割り当てられた文字列に末尾の空白が含まれないようにします。その構造を使用するのが最善です-それは、目に見えないスペースを追いかけて頭を悩ませる多くのことを救うことができます.
最後にMAINVER
、ターゲット行の構造を投稿していないため、のデコードが正しいことを保証できませんperlversion.txt
また、ターゲット行 (文字列を含む行subversion
がファイル (またはファイル自体) に存在しない行) が欠落している場合、予期しない結果が生じる可能性があります。