OK、セットアップは次のとおりです。
次の形式のテキスト ファイルが大量にあります。
filename## time Description of file with spaces
forループを使用して、ファイルの説明でディスク上の実際のファイルの名前を変更しようとしています:
FOR /F "tokens=1,2,*" %%a IN (%1) DO call :rename %%a %%b "%%c"
goto :eof
:rename
set origfilename=%1
set last2=%1:~-2%
set time=%2
set "multiword=%~3"
ren %origfilename%.ext "%last2%_%time%_%multiword%.ext"
set origfilename=
set last2=
set time=
set multiword=
何が起こっているかは次のとおりです。
last2 は元のファイル名の最後の 2 文字を取得することはありません。また、:rename の呼び出しの代わりに DO の後に %3 をエコーすると、スペースを含む完全なトークンが含まれます。ループで %3 を使用しようとすると、%3 の最初のトークンしか含まれません。for の前に setlocal EnableDelayedExpansion を使用してみましたが、期待どおりに動作しませんでした。
一度に多くのことをしようとしていませんか? 助けてくれてありがとう!