组文件同样基于尺寸为我使用下面的命令来生成基于名称的文件列表中的组
的“N”数字......组文件同样基于尺寸为我使用下面的命令来生成基于名称的文件列表中的组
dir [folder_location] /b >[output_file_name.txt]
我如何将其整合到“N”组这样每个组的总大小是相似的......?
[更新]例如:我必须给100个人提供1000个文件才能重新编辑。我希望他们每个人总共获得大约相同数量的文本进行编辑。这样没有人太幸运,太幸运了。
,通过大小文件组范围
第一次尝试(事实证明,这是不是OP想要的东西)
这是一种方法。您可以根据需要调整组定义。重要的是,该组限制中降序数字顺序列出,并在最后一组必须为0。
@echo off
setlocal
set "folder=test"
set "out=fileGroups.txt"
(
pushd "%folder%"
for /f "eol=: delims=" %%F in ('dir /b /a-d /os "*"') do (
set "class="
for %%A in (
"100000 [>= 100,000] "
"10000 [10,000 - 99,999] "
"1000 [1,000 - 9,999] "
"100 [100 - 999] "
"0 [< 100] "
) do for /f "tokens=1*" %%B in (%%A) do (
if not defined class if %%~zF geq %%B (
echo %%C %%~nxF
set class=1
)
)
)
popd
)>"%out%"
type "%out%"
划分文件成n组大致相等的总文件长度
的第二次尝试(此是OP所要求的)
通过在行号上使用模(余数)运算符,将所有文件分配到组很简单。这些文件可以简单地按大小进行排序,但随后的第一组将总是在任何一组ñ最小的文件,并在最后一组将获得最大的。这些团体将不公平。
假设有一个随机分布的文件大小,想要的是旋转哪个组获得最小和最大的任何特定组n。这个解决方案在数学上有点令人惊讶。
以下代码将数字1到25分配给5个不同组中的一个,将该数字写入组文件。每个组的总和是65
@echo off
setlocal enableDelayedExpansion
del group*.txt
for /l %%N in (1 1 25) do (
set /a "group=((%%N-1)+(%%N-1)/5)%%5+1"
echo %%N >>group!group!.txt
)
最终的答案简单地应用上述的文件列表,按大小排序。这些名字通过FINDSTR传送给每个文件分配一个“行号”。由于列表按文件大小排序,因此“行号”与文件大小排序相同。
@echo off
setlocal disableDelayedExpansion
set "inFolder=test"
set "outFolder=groups"
set "groups=5"
pushd "%inFolder%"
2>nul del "%outFolder%\group*.txt"
for /f "tokens=1* delims=:" %%A in ('dir /b /a-d /os "*"^|findstr /n "^"') do (
set "file=%%B"
set /a "group=((%%A-1)+(%%A-1)/groups)%%groups+1"
setlocal enableDelayedExpansion
>>"!outFolder!\group!group!.txt" echo !file!
endlocal
)
popd
我已更新示例,请检查。 –
@DebajyotiDas - 我明白你的要求了。我已经更新了我的答案。 – dbenham
我已经更新了这个例子,请你检查一下。 –