我是批处理脚本的新手,正在寻找可以执行以下操作的脚本:
我有大量文件,超过 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
对我没用。
我不想通过其他 shell、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
脚本中的 move 命令也会移动 dir_main 文件夹中的所有项目(新创建的 subdir 文件夹除外),但这可能不是问题。它也会花费相当长的时间(powershell 可能会更快)。您还应该一次性运行它或增加计数器变量(否则它将从创建 subdir1 开始重新运行)这不是最好的,但我希望它对您有用。