Batch-Skript zum Verschieben von x Dateien in leere Ordner

Batch-Skript zum Verschieben von x Dateien in leere Ordner

Ich habe keine Erfahrung mit Batch-Skripten und suche nach einem Skript, das Folgendes kann:

Ich habe eine sehr große Anzahl von Dateien, über 150000.
Diese 150000 Dateien befinden sich in dir/dir_main.
Ich möchte ein Batch-Skript von Windows cmd ausführen, sodass es Folgendes tut


Verschieben Sie 100 Dateien gleichzeitig, egal welche 100, in jedes Unterverzeichnis


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


beachte das Wortbewegen nicht kopieren.


Ich habe folgendes Skript gefunden, das alles verschiebt:

@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

für mich nicht nützlich.

Ich möchte dies nicht über eine andere Shell, Linux usw. ausführen.

Ich muss eine Batchdatei über die Windows-Eingabeaufforderung ausführen.

Antwort1

So etwas könnte funktionieren.

@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

Der Move-Befehl im Skript verschiebt alle Elemente in dir_main, also auch alle Ordner (mit Ausnahme neu erstellter Unterverzeichnisordner), aber das ist möglicherweise kein Problem. Es wird auch ziemlich lange dauern (PowerShell wäre wahrscheinlich schneller). Sie sollten es auch in einem Durchgang ausführen oder die Zählervariable erhöhen (sonst beginnt es erneut mit der Erstellung von Unterverzeichnis 1). Es ist nicht das Beste, aber ich hoffe, es ist für Sie von Nutzen.

verwandte Informationen