【问题标题】:Choose Random text file in batch批量选择随机文本文件
【发布时间】:2017-01-25 21:19:29
【问题描述】:

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

有人可以帮我做吗?

示例 假设我有一个文件夹位于:C:\Workstation\Jobs 在那个文件夹中,一次可能有 10-20 个 .txt 文件

这里的目标是让批处理文件检查文件夹,然后选择一个随机文件并将选择的文件输出到一个变量

【问题讨论】:

  • 你会想要改写你的问题,因为现在的答案是“是的,是的。”
  • 该文件夹下还有其他文件吗?
  • @YVbakker 不会只有文本文件
  • 天哪,我不是说要改写成那个。现在太宽泛了。如果您有代码,请将其添加到您的问题中。如果您没有任何代码,请编写一些代码,然后将其添加到您的问题中。

标签: batch-file


【解决方案1】:

如果上述文件夹仅包含文本文件,您需要以下内容:

  • 某种数组 (dir) 中的文件夹内容列表
  • 统计文件数量(for循环)
  • 在 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

【讨论】:

    【解决方案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 /c 计算dir 命令找到的文件数,for 将计数分配给%%a。然后将selection 分配给 1+(randomnumber mod filecount) 给出 1..filecount。

    findstr /n 输出dir 命令找到的每个文件的名称,前缀为序号:%%a 将被分配编号(: 和 @ 之前的标记987654331@ 文件名(delims 为: 的第一个分隔符之后)

    当行号与selection 匹配时,文件名将分配为找到的文件名。

    【讨论】:

    • 您的代码只有一个问题。它似乎不能很好地处理带有空格的文件,我的意思是它完全拒绝运行
    • 对我来说运行完美,即使文件名中有空格或目录名中有空格。请张贴一小部分您正在使用的文件名示例,并给您带来麻烦。
    • 文件名实际上是完成工作的电脑的用户名:Private User Account.txt、Guest User Account.txt、Dave's Account.txt、Lennys Account.txt
    • 使用这些文件名非常适合我。尝试将DO SET /a selection... 更改为DO echo%%a&SET /a selection...,这应该会向屏幕报告找到的.txt 文件的数量。如果它报告 0,那么 dirfind 语句有问题。尝试将dir 语句(仅dir 部分-直到但不包括^)复制到第一个for 之前的一行。这应该列出文件名。我希望您没有尝试重新输入代码 - 您应该复制并粘贴。一个不合适的字符可能会导致奇怪的结果。
    • 它列出了没有问题的文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多