【发布时间】:2021-01-04 13:03:51
【问题描述】:
我有一个包含数百首音乐曲目列表的 CSV 文件,我想要 随机抽取100个。 我对 bacth 脚本完全陌生。
表格的创建是正确的,但我希望能够使其随机而不是重复。
第二个 FOR (in :RANDOMIZE) 不回显任何内容
@ECHO OFF
setlocal enabledelayedexpansion
set _total=0
set _max=100
for /f "skip=1 tokens=11 usebackq delims=;" %%I in ("playlist.csv") do (
set _filepath=%%~I
set _ext=%%~xI
if "!_ext!"==".flac" CALL :ADDARRAY
if "!_ext!"==".mp3" CALL :ADDARRAY
)
:RANDOMIZE
for %%a in (%_array%) do (
set /A _total+=1
echo %%a
if "!_total!"=="!max!" @goto :eof
)
:ADDARRAY
set /A _cpt+=1
set _array[!_cpt!]=!_filepath!
@goto :eof
【问题讨论】:
-
没有名为
%_array%的变量,这就是for %%a循环不迭代的原因。循环实际上应该是这样的:for /F "tokens=1* delims==" %%A in ('set _array[') do (,然后在循环体中使用%%B。或者,使用这个循环:for /L %%B in (1,1,%_max%) do ((也使用%%B)。此外,没有名为!max!的变量,它是!_max!。虽然这仍然不会返回随机值…… -
感谢 aschipfl 的回答 工作就像一个魅力 :) 你知道我如何随机化它吗?
-
不客气,虽然这不是一个答案,而只是一个评论,因为缺少随机化的基本部分,这并不是那么微不足道,特别是当你想避免重复时。您可以尝试使用本网站的搜索功能,例如搜索词
[batch-file] random without duplicates。如果您不关心重复,请在循环中尝试set /A "RND=!RANDOM!%%%_max%+1" & echo !RND!...
标签: arrays csv batch-file random cmd