バッチスクリプトは必要ありません
for %F in (tok.*) do for /f "delims=." %X in ("%~xF") do ren "%F" "%X.%~nF"
バッチスクリプト内で使用する場合は、パーセントを2倍にします。
ファイル名に複数のファイルが含まれている場合、上記の結果が得られない場合が.
あります。
たとえば、tok.part1.part2
になりpart2.tok.part1
ます。
代わりに、必要に応じpart1.part2.tok
て、次の簡単なスクリプトを使用できます。
@echo off
ren tok.* .*?.tok
for %%F in (.*.tok) do for /f "tokens=* delims=." %%A in ("%%F") do ren "%%F" "%%A"
その1番目のRENが2番目のスクリプトでどのように機能するかについては、「WindowsRENAMEコマンドがワイルドカードをどのように解釈するか」を参照してください。
あるべき時にのような名前tok..name
になるという難解な議論ができると思います。これは、次を使用して修正できます。name.tok
.name.tok
@echo off
setlocal disableDelayedExpansion
ren tok.* .*?.tok
for %%F in (.*.tok) do (
set "name=%%F"
setlocal enableDelayedExpansion
ren "!name!" "!name:~1!"
endlocal
)
上記のソリューションの良いところは、「tok」の長さに依存しないことです。「tok」の代わりに任意の長さの文字列値を使用でき、コードも同様に機能します。
James Lソリューションは、一定の長さでうまく機能します。その解決策は少し改善することができます。
- 部分文字列演算の2番目の引数は必要ありません。これを削除すると、元の完全な名前がどれだけ長くても、ソリューションが機能します。
- 名前にが含まれていると、コードは失敗
!
します。遅延拡張のオンとオフを切り替えることで修正されました。
- スペースまたは特殊文字の場合、ファイル名はRENステートメントで引用符で囲む必要があります
。
@echo off
setlocal disableDelayedExpansion
for %%i in (tok.*) do (
set "filename=%%i"
setlocal enableDelayedExpansion
ren "!filename!" "!filename:~4!.tok"
endlocal
)