저는 배치 스크립트를 처음 사용하며 다음을 수행할 수 있는 스크립트를 찾고 있습니다.
150000개가 넘는 매우 많은 수의 파일이 있습니다.
이 150000개 파일은 dir/dir_main에 있습니다.
Windows cmd에서 배치 스크립트를 실행하여 다음을 수행하려고 합니다.
한 번에 100개의 파일을 이동합니다(어떤 100개인지는 중요하지 않음). 각 하위 디렉터리로
dir/dir_main/subdir1
dir/dir_main/subdir2
dir/dir_main/subdir3
.
.
.
디렉토리/dir_main/하위 디렉토리#
단어를 주목하라이동하다 복사하지 마세요.
모두 이동하는 다음 스크립트를 찾았습니다.
@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
나에게 유용하지 않습니다.
나는 이것을 다른 쉘, 리눅스 등을 통해 실행하려고 하지 않습니다.
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의 모든 항목을 폴더로 이동하지만(새로 생성된 하위 디렉터리 폴더 제외) 이는 문제가 되지 않을 수 있습니다. 시간도 꽤 걸립니다(powershell이 더 빠를 수도 있습니다). 또한 한 번에 실행하거나 카운터 변수를 올려야 합니다(그렇지 않으면 subdir1 생성과 함께 다시 시작됩니다). 최고는 아니지만 도움이 되기를 바랍니다.