フォルダーの中にあるファイルを分割するWindowsのバッチファイル

2024年4月24日

指定された数ごとに分割する

@echo off
setlocal enabledelayedexpansion

REM フォルダのパスと分割数を設定
set sourceDir="D:\data2\00in"
set splitCount=70
REM 分割フォルダのベースパスを設定
set splitDirBase="D:\data2\00out"
set folderCount=0
set fileCount=0


REM ソースディレクトリ内のファイルを名前順に処理
for /f "delims=;" %%F in ('dir /b /on "%sourceDir%\*.*"') do (
    set /a "folderCount=!fileCount! / !splitCount!"
    
    REM 新しいフォルダを作成
    if not exist "!splitDirBase!\!folderCount!" (
        mkdir "!splitDirBase!\!folderCount!"
    )

    REM ファイルを新しいフォルダに移動
    move "%sourceDir%\%%F" "!splitDirBase!\!folderCount!\"
    set /a "fileCount+=1"
)

endlocal

ファイル名の最後の文字で振り分ける

変更すれば最初の文字や文字数も指定できます

@echo off
setlocal enabledelayedexpansion

REM ファイルが存在するディレクトリのパスを設定
set sourceDir="D:\data2\a\aa\b\test"

REM 移動先の親ディレクトリを設定
set destinationDir="D:\data2\a\aa\img2img"

REM ソースディレクトリ内のファイルを処理
for %%F in ("%sourceDir%\*.*") do (
    REM ファイル名の最後の文字を取得
    set "fileName=%%~nF"
    set "lastChar=!fileName:~-1,1!"
    REM ファイル名のの文字を取得
    rem    set "lastChar=!fileName:~0,1!"

    REM 移動先フォルダのパスを生成
    set "destinationFolder=%destinationDir%\!lastChar!"

    REM 移動先フォルダが存在しない場合、作成
    if not exist "!destinationFolder!" (
        mkdir "!destinationFolder!"
    )

    REM ファイルを移動
    move "%%F" "!destinationFolder!"
)

endlocal

bat,windows

Posted by eightban