環境変数の置換と部分文字列をごっちゃにしていますね。それぞれ全く別物です。
set /? に、まさに
は最後の 2 文字以外のすべてが展開されます。
という例があります。
DOS
1for /f "delims=" %%A in (index.txt) do (
2set line=%%A
3call :sub
4)
5goto :eof
6:sub
7echo %line:~0,-1%
ただ、バッチスクリプトでのテキスト処理は、ファイルにバッチスクリプトでの特殊文字が含まれていると、途端に困難ないし不可能になるので、そういう場合は他のツールを使った方が良いでしょうね。
#追記(訂正)
質問を読み誤ってました。行末の1文字を削除じゃなくて、最終行のみなんですね。
ちょっと面倒ですが、1行ずつ遅らせるしか無い。やっぱり他のツールを使うべきかな。
DOS
1@echo off
2set last=
3for /f "delims=" %%A in (index.txt) do (
4 set line=%%A
5 call :sub
6)
7echo %last:~0,-1%
8goto :eof
9:sub
10if not "%last%" == "" (
11 echo %last%
12)
13set last=%line%