回答:
あなたが使用することができます FOR / F フォルダー名部分を解析する区切り文字とトークンを設定し、後で使用するためにそれらを使用して変数を設定するためのループ REN コマンド。
あなたも利用したい Setlocal EnableDelayedExpansion それに応じて、ループ内の反復ごとにrenameコマンドで正しく使用される(実行時に解析されない)ために、ループ内で設定された変数の展開を処理します。
@ECHO
SET srcdir=C:\folder\path
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "%srcdir%\*"') DO (
SET fname=%%~F
SET fname=!fname:~0,8!
SET fname=!fname!
REN "%srcdir%\%%~XNF" "!fname!"
)
EXIT
常にある場合 _
最初のx文字の後は、コマンドラインから次のように動作します(バッチは不要です)。
for /d %A in (*) do @for /f "delims=_ eol=_" %B in ("%A") do ren "%A" "%B"
上記のコマンドをバッチスクリプト内に入れる場合は、パーセントを2倍にしてください。
頼れない場合 _
最初のx文字の後は、このコマンドはコマンドラインで動作します。最初の8文字は保持されます。
for /d %A in (*) do @set "folder=%A"&call ren "%^folder%" "%^folder:~0,8%"
あるいは、このバッチスクリプトを使って最初の8文字を保存することもできます。
@echo off
setlocal disableDelayedExpansion
for /d %%A in (*) do (
set "folder=%%A"
setlocal enableDelayedExpansion
ren "!folder!" "!folder:~0,8!"
endlocal
)
それともあなたは私を使用することができます JREN.BAT正規表現名前変更ユーティリティ 。これは、XP以降のWindowsマシンでネイティブに実行される純粋なスクリプト(ハイブリッドバッチ/ JScript)です。サードパーティのexeファイルは必要ありません。
最初からすべてを削除 _
先に
jren "_.*" "" /d
最初の8文字を保存
jren "^(.{8}).*" "$1" /d
注意: フォルダではなくファイルの名前を変更しようとしている場合は、次のようにします。
ren *.txt ????????.txt
しかし残念ながら、フォルダの名前を変更するときにワイルドカードを使用することはできません。したがって、この方法はフォルダには役に立ちません。見る WindowsのRENAMEコマンドはワイルドカードをどのように解釈しますか? 詳しくは