将包含许多文件的文件夹拆分为多个子文件夹 (Windows 10)
Break a folder with many files to multiple subfolders (Windows 10)
我有一个包含 110.000 个文件的文件夹,我想要一种方法将此文件夹分成多个子文件夹,每个子文件夹包含 3000 个文件(也许使用批处理脚本?)。 (用 WinExplorer 尝试 copy/paste 会卡在 "Preparing to Copy"。)
例如:
BigFolder
|
NewFolder
| | | | |
Sub1 Sub2 Sub3 Sub4 Sub5...
我很惊讶地发现我的情况相同。
我有 30,000 个文件需要排序,所以我在这个页面上提问:
这是Compo的脚本:
@Echo Off
If /I Not "%__CD__%"=="%~dp0" PushD "%~dp0" 2>Nul||Exit/B
SetLocal EnableDelayedExpansion
Set "DirN=-1"
:Check_DirN
Set/A "DirN+=1"
If Exist "%DirN%" GoTo Check_DirN
Set "limit=700"
For %%A In (*.bat *.cmd *.txt) Do (
If Not Exist "%DirN%" MD "%DirN%"
If /I Not "%%~nxA"=="%~nx0" RoboCopy . "%DirN%" "%%A" /MOV 1>NUL
Set/A "limit-=1"
If !limit! Lss 0 GoTo Check_DirN
)
Echo(Task Done!
Timeout -1 1>Nul
这是我使用的,我为此做了一些编辑:
@Echo Off
If /I Not "%__CD__%"=="%~dp0" PushD "%~dp0" 2>Nul||Exit/B
taskkill /f /im explorer.exe >nul
taskkill /f /im SearchIndexer.exe >nul
sc stop WSearch >nul
sc config WSearch start= disabled >nul
SetLocal EnableDelayedExpansion
Set "DirN=-1"
:Check_DirN
Set/A "DirN+=1"
If Exist "%DirN%" GoTo Check_DirN
cls
echo Moving files to Directory %DirN%...
Set "limit=2999"
MD "%DirN%"
For %%A In (*.html) Do (
RoboCopy . "%DirN%" "%%A" /MOV 1>NUL
Set/A "limit-=1"
If !limit! Lss 0 GoTo Check_DirN
)
Echo(Task Done!
start explorer.exe
start SearchIndexer.exe
sc config WSearch start= delayed-auto >nul
sc start WSearch >nul
Timeout -1 1>Nul
如果需要,您可以删除 taskkill
、start
和 sc
部分。
我添加这部分是因为 explorer 和 Windows Search Indexer 在移动文件时会造成内存浪费。我建议您 运行 具有管理员权限的脚本。
尝试小规模测试脚本,看看它是否有效。
我有一个包含 110.000 个文件的文件夹,我想要一种方法将此文件夹分成多个子文件夹,每个子文件夹包含 3000 个文件(也许使用批处理脚本?)。 (用 WinExplorer 尝试 copy/paste 会卡在 "Preparing to Copy"。)
例如:
BigFolder
|
NewFolder
| | | | |
Sub1 Sub2 Sub3 Sub4 Sub5...
我很惊讶地发现我的情况相同。
我有 30,000 个文件需要排序,所以我在这个页面上提问:
这是Compo的脚本:
@Echo Off If /I Not "%__CD__%"=="%~dp0" PushD "%~dp0" 2>Nul||Exit/B SetLocal EnableDelayedExpansion Set "DirN=-1" :Check_DirN Set/A "DirN+=1" If Exist "%DirN%" GoTo Check_DirN Set "limit=700" For %%A In (*.bat *.cmd *.txt) Do ( If Not Exist "%DirN%" MD "%DirN%" If /I Not "%%~nxA"=="%~nx0" RoboCopy . "%DirN%" "%%A" /MOV 1>NUL Set/A "limit-=1" If !limit! Lss 0 GoTo Check_DirN ) Echo(Task Done! Timeout -1 1>Nul
这是我使用的,我为此做了一些编辑:
@Echo Off
If /I Not "%__CD__%"=="%~dp0" PushD "%~dp0" 2>Nul||Exit/B
taskkill /f /im explorer.exe >nul
taskkill /f /im SearchIndexer.exe >nul
sc stop WSearch >nul
sc config WSearch start= disabled >nul
SetLocal EnableDelayedExpansion
Set "DirN=-1"
:Check_DirN
Set/A "DirN+=1"
If Exist "%DirN%" GoTo Check_DirN
cls
echo Moving files to Directory %DirN%...
Set "limit=2999"
MD "%DirN%"
For %%A In (*.html) Do (
RoboCopy . "%DirN%" "%%A" /MOV 1>NUL
Set/A "limit-=1"
If !limit! Lss 0 GoTo Check_DirN
)
Echo(Task Done!
start explorer.exe
start SearchIndexer.exe
sc config WSearch start= delayed-auto >nul
sc start WSearch >nul
Timeout -1 1>Nul
如果需要,您可以删除 taskkill
、start
和 sc
部分。
我添加这部分是因为 explorer 和 Windows Search Indexer 在移动文件时会造成内存浪费。我建议您 运行 具有管理员权限的脚本。
尝试小规模测试脚本,看看它是否有效。