2016-09-17 114 views
0

是否可以使批处理文件从指定文件夹中选择一个完全随机的文本文件批量选择随机文本文件

有人可以帮我做到吗?

例如 可以说,我得到了设在这里的文件夹:C:\工作站\作业 和该文件夹中有一次

的目标在这里也许10-20 .txt文件是使批处理文件检查该文件夹,然后选择一个随机文件和输出已选定的文件到一个变量

+2

你会想改写你的问题,因为现在的答案是“是的,这是。” – SomethingDark

+0

在那里上述的其他文件明镜? – YVbakker

+0

@YVbakker不会只有文本文件 – NickyGamePlays

回答

2
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
FOR /f %%a IN (
'dir /b /a-d "%sourcedir%\*.txt"^|find /i /c ".txt" ' 
) DO SET /a selection=1 + (%RANDOM% %% %%a) 
FOR /f "tokens=1*delims=:" %%a IN (
'dir /b /a-d "%sourcedir%\*.txt"^|findstr /n /i ".txt" ' 
) DO IF %%a==%selection% SET filename=%%b 
ECHO selected %filename% 

GOTO :EOF 

你需要改变的sourcedir设置,以满足您的具体情况。

find /cdir命令找到的文件数进行计数,for将计数值指定为%%a。然后将selection分配给1+(随机数 mod filecount),给出1..filecount。

findstr /n输出由dir命令中找到的每个文件的文件名,通过前缀的序列号:%%一个将被分配的数量(:%%b文件名之前令牌(afther其中delims是第一分隔符:

当行数相匹配selection,文件名被分配发现的文件名。

+0

您的代码只有一个问题。它似乎没有处理空间好的文件,因此我的意思是它完全拒绝运行。 – NickyGamePlays

+0

对我来说是完美的运行,即使在文件名中有空格或目录名中有空格也是如此。请张贴您正在使用的文件名的小样本,并给出错误。 – Magoo

+0

文件名实际上是用于个人电脑的用户名,它使这项工作如此:私人用户Account.txt,来宾用户Account.txt,Dave的Account.txt,Lennys Account.txt – NickyGamePlays

2

在上述文件夹中的情况下,只包含文本文件,你需要以下条件:

  • 列表某种类型的文件夹内容阵列(DIR)的
  • 计数文件的量(用于环路)
  • 挑0之间和文件的量(%RANDOM%* amount_of_files/32768)
  • 输出的匹配文件名的随机数(在数组)你想

希望这会使你在正确的方向:-)

来源变量:
http://ss64.com/nt/syntax-random.html
How to loop through files matching wildcard in batch file
Create list or arrays in Windows Batch