2017-07-07 35 views
0

フォルダのレイアウトが似ているネストされたFoldernamesの文字の特定の量を削除します。名前の変更/

  • ルート\ folder1a \ subfolder2a \ randommmsubfolder3a

  • ルート\ folder1b \ subfolder2b \ randommmsubfolder3b

  • ルート\ folder1c \サブフォルダ2c \ randommmsubfolder3c

私は削除したい/ストリップの8番目の文字e第3レベルの深いフォルダ名。基本的にそれぞれの名前の "randommm"の部分です。一部の名前に感嘆符が付きます。 私はループバッチを持っていますが、最初の出会いの名前を変更するだけですが、その後は何も進めません。ここに私のコードは次のとおりです。

cd "C:\Root" 
for /D %%i in (*) do (
cd %%i 
for /D %%j in (*) do (
cd %%j 
setlocal DisableDelayedExpansion 
for /D %%k in (*) do (
set name=%%k 
setlocal enableextensions enabledelayedexpansion 
ren "!name!" "!name:~8!" 
endlocal 
endlocal 
))) 

答えて

0
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
pushd "%sourcedir%" 
for /D %%i in (*) do (
pushd "%%i" 
    for /D %%j in (*) do (
    pushd "%%j" 
    setlocal DisableDelayedExpansion 
    for /D %%k in (*) do (
    set "name=%%k" 
    setlocal enableextensions ENABLEDELAYEDEXPANSION 
    ECHO ren "!name!" "!name:~8!" 
    ENDLOCAL 
) 
    ENDLOCAL 
    popd 
) 
popd 
) 
popd 

GOTO :EOF 

2つの問題 - それは、対応するsetlocalcd変更ディレクトリのネストレベルと一致するように移動される第2のendlocalニーズが、これらのディレクトリの変更はではありませんがバックアウトendlocal AFAII。 pushd/popdを使用すると正しい進行が保証されます。

+0

対応する 'setlocal'が変数と作業ディレクトリを含む新しい環境を作成するので、' endlocal'は前の作業ディレクトリを復元します。すべてのドライブのカレントディレクトリもリコールされます... – aschipfl

+0

@aschipfl:ああ、良いです。私はそれを書き留めておきます(しかし、それが次の時にそれを忘れるかもしれません)。 – Magoo

+0

@Magooソリューションが私のために働いていました。最後にpushdとpopdを使う方法を学んだ、ありがとう –

関連する問題