我使用以下命令根据名称生成文件列表...
dir [folder_location] /b >[output_file_name.txt]
如何将它们分组到' n'各组的总体规模相似......?
[更新] 例如:我需要向100个人提供1000个文件进行重新编辑。我希望他们每个人都能获得大约相同数量的文本进行编辑。这样没有人太不走运,而另一个人幸运得太少。
答案 0 :(得分:0)
查看/o:s
的dir
选项。要将文件组合在一起,您必须使用for /f
循环对信息进行一些解析,使用%%~zA
检查文件的大小输出,并在此时创建分色。
这是一个示例,它将输出filepath = size
,不包括目录,并从最大到最小排序。
for /f "usebackq delims=" %%A in (`dir /b /o:-s /a:-d`) do echo.%%~dpnA = %%~zA
答案 1 :(得分:0)
首次尝试按大小范围对文件进行分组
(事实证明这不是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要求的) < / p>
使用行号上的modulo(余数)运算符将所有文件分配给组很简单。文件可以简单地按大小排序,但是第一组总是会在 n 的任何组中获得最小的文件,最后一组将获得最大的文件。这些团体不公平。
假设存在文件大小的随机分布,那么所需要的是旋转哪个组对于任何特定的 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