【バッチ】サブフォルダの中身を一つ上の階層にまとめる

PC

個人的用途向けに魔改造したバッチファイル。

下図のように
バッチを実行したフォルダ[A]の一つ下のサブフォルダの中身01~04.txtを[A]直下にまとめ、入っていたサブフォルダ自体は削除します。

実行後思うような結果にならなくても元に戻せないので取り扱い注意!!
必ずバックアップを取った上で実行してください。
使用は自己責任でお願いいたします。
この段落何度も繰り返します。

※参考・出典
一階層下のファイルを全て現在のフォルダに移動させるバッチファイル【ついでにコマンドプロンプト入門】 – Programming Serendipity (hatenablog.com)
マヂ感謝😂

1.サブフォルダから一つ上に

コマンド出典
一階層下のファイルを全て現在のフォルダに移動させるバッチファイル【ついでにコマンドプロンプト入門】 – Programming Serendipity (hatenablog.com)
マヂ感謝😂

実行後思うような結果にならなくても元に戻せないので取り扱い注意!!
必ずバックアップを取った上で実行してください。
使用は自己責任でお願いいたします。
この段落何度も繰り返します。

下記をテキストエディタなどにコピペして、拡張子を.batにして保存。
誤って変な場所で実行したら大変なことになるよ。

・1階層下のみ実行されます。
・2階層以上あるフォルダは削除されず残ります。
 その場合は1階層下のファイルは動作通り一つ上に、
 2階層目以降のファイルはそのまま残ります。
・名前は[aフォルダ]に[01.txt] [bフォルダ]に[02.txt]がある場合
 a_01.txt
 b_02.txt
 という結果になります。
・バッチファイルは残ります。

for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    for %%j in (*) do ren "%%j" "%%i_%%j"  
    move * ../  
    popd  
    rd "%%i"  
)  

2.サブフォルダから一つ上に改_自身を削除

実行後思うような結果にならなくても元に戻せないので取り扱い注意!!
必ずバックアップを取った上で実行してください。
使用は自己責任でお願いいたします。
この段落何度も繰り返します。

下記をテキストエディタなどにコピペして、拡張子を.batにして保存。
誤って変な場所で実行したら大変なことになるよ。

1のバッチに自身(バッチファイル)を削除させる機能を付与。

for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    for %%j in (*) do ren "%%j" "%%i_%%j"  
    move * ../  
    popd  
    rd "%%i"  
)  
Del /F "%~dp0%~nx0"

3.サブフォルダから一つ上に改2_連番_自身を削除

実行後思うような結果にならなくても元に戻せないので取り扱い注意!!
必ずバックアップを取った上で実行してください。
使用は自己責任でお願いいたします。
この段落何度も繰り返します。

下記をテキストエディタなどにコピペして、拡張子を.batにして保存。
誤って変な場所で実行したら大変なことになるよ。

1.2.の魔改造版、ちょっと性質が変わります。
エラーを想定していない非常に雑なコマンドなので予期せぬ動作がよく起こります

・1.2の動作に加え、フォルダ内の[jpgファイル]を選択し、
 [001.jpg]から始まる連番にリネームします。
・なおjpg以外のファイルがある場合は無視します。
・元のファイル名のソートによって予想外の順番になる可能性があります。 
 あらかじめ「お~瑠璃ね~む」などファイル名管理ソフトで
 ファイル自体に連番をつけておくと確実ですこのバッチの存在意義とは
・その他予期せぬ動作が多々ありますが自己責任で。
 ちゃんとどんな内容か理解してから実行してください。
・jpg以外のファイルが対象の場合は
 11、13行目のjpgを適当な拡張子に変更して使ってください。

for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    for %%j in (*) do ren "%%j" "%%i_%%j"  
    move * ../  
    popd  
    rd "%%i"  
)  
setlocal enabledelayedexpansion
set n=1000
for /f "usebackq delims=" %%i in (`dir /b *.jpg`) do (
    set /a n+=1
    move "%%~i" "!n:~-3!.jpg"
)
endlocal
Del /F "%~dp0%~nx0"

コメント