x 個のファイルを空のフォルダに移動するバッチ スクリプト

x 個のファイルを空のフォルダに移動するバッチ スクリプト

私はバッチ スクリプトの初心者で、次のことができるスクリプトを探しています。

非常に多くのファイルがあり、150000個以上
あります。これらの150000個のファイルはdir/dir_mainにあります。Windows
のcmdからバッチスクリプトを実行して、次の操作を実行したいと考えています。


一度に100個のファイルを各サブディレクトリに移動します。どの100個でもかまいません。


dir/dir_main/subdir1
dir/dir_main/subdir2
dir/dir_main/subdir3
.
.
.
dir/dir_main/subdir#


単語に注目動く コピーしないでください。


すべてを移動する次のスクリプトを見つけました:

@ECHO OFF

SET "source=C:\Users\msalehi\Documents\row-columnn fix\test_move\olddir"
SET "dest=C:\Users\msalehi\Documents\row-columnn fix\test_move\newdir"
SET "FileList=file1.txt file2.txt file8.txt" 

SET "dupCnt=1"

FOR /R "%source%" %%A IN (%FileList%) DO (
    IF NOT EXIST "%dest%\%%~NXA" (
        XCOPY /F /Y "%%~FA" "%dest%\" && IF EXIST "%%~FA" DEL /Q /F "%%~FA"
    ) ELSE (
        CALL :DupeRoutine "%%~FA" "%%~NA" "%%~XA"
        )
    )
GOTO :EOF

:DupeRoutine
IF EXIST "%dest%\%~2_(%dupCnt%)%~3" (
    SET /A dupCnt=%dupCnt%+1
    CALL :DupeRoutine "%~1" "%~2" "%~3"
) ELSE (
    IF NOT EXIST "%dest%\%~2_(%dupCnt%)%~3" ECHO F | XCOPY /Y /F "%~1" "%dest%\%~2_(%dupCnt%)%~3" && DEL /Q /F "%~1"
    SET "dupCnt=1" 
    )
GOTO :EOF

私にとっては役に立ちません。

これを他のシェルや Linux などで実行するつもりはありません。

Windows cmd 経由でバッチ ファイルを実行する必要があります。

答え1

このようなものがうまくいくかもしれません。

@echo off
set /a counter=1
set /a filesperfolder=100
cd dir\dir_main

:loopstart
set dirname=subdir%counter%
md %dirname%
echo %dirname%

dir /b | findstr /v /i "subdir*"> %temp%\temp.txt && for /l %%l in (1,1,%filesperfolder%) do @for /f "tokens=1,2* delims=:" %%a in ('findstr /n /r "^" %temp%\temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%\%%b >nul

set /a counter=%counter%+1
for /f "tokens=*" %%a in ('type %temp%\temp.txt ^| find /c /v ""') do set _filesmoved=%%a
del %temp%\temp.txt
IF %_filesmoved% LSS 100 goto done

goto loopstart

:done
cls
echo All files were moved!!
pause
exit

スクリプト内の移動コマンドは、dir_main 内のすべてのアイテムを移動するため、フォルダーも移動します (新しく作成された subdir フォルダーを除く)。ただし、これは問題にならない可能性があります。また、かなり時間がかかります (PowerShell の方がおそらく高速です)。また、一度に実行するか、カウンター変数を上げて実行する必要があります (そうしないと、subdir1 の作成から再開されます)。最善の方法ではありませんが、お役に立てば幸いです。

関連情報