如何让 Paul Black 的随机文件选择器批处理脚本不选择自身

typ*_*789 6 windows batch

我已经使用 Paul Black 的随机文件选择器批处理脚本一段时间来处理我们广播电台播放的一个方面 - 大多数时候它都工作得很好。

除非有时它会自行添加,因为它当然必须位于同一文件夹中。此时播放将停止,因为 .bat 不是音频文件。

这是我修改后的原始脚本,用于通过 CMD 将文件推送到我们的播放:

@echo off
:: ##############################################################################
:: # Title:      Select a random filename in the current directory [ folder ].  #
:: # Created By: Paul Black at TenForums.com/members/paul-black.html            #
:: # Created:    October 2020.                                                  #
:: ##############################################################################
title Select A Random Filename.
mode con: cols=80 lines=5 & color 17
setlocal EnableDelayedExpansion
set n=0
for %%f in (*.*) do (
  set /A n+=1
  set "file[!n!]=%%f"
)
set /A "RAND=(n*%Random%)/32768+1" & set /A "rand=(n*%Random%)/32768+1"
echo. & echo "!file[%RAND%]!"
echo. & echo ^>Press ANY key to EXIT . . . & pause >nul & exit
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能让它忽略自身,而不是选择random.bat呢?

Jef*_*lin 5

@Giacomo1968 答案有正确的想法;更改语句(*.*)中的FOR来排除非音频文件(或者更确切地说,仅包括音频文件)。

FOR 上的 SS64指出,您可以有多种模式,包括由标准分隔符分隔的通配符。

因此,如果您想将选择限制为(例如).WAV.MP3文件,您可以编写:

FOR %%f IN (*.MP3,*.WAV) ...
Run Code Online (Sandbox Code Playgroud)

我建议为 SS64 添加书签;这是关于 Linux 和 macOS 上的 Winbatch、PowerShell 和 bash 的简洁而详细的参考资料。


Gia*_*968 0

尝试改变这个:

for %%f in (*.*) do (
Run Code Online (Sandbox Code Playgroud)

要将其限制为.mp3这样的文件:

for %%f in (*.mp3) do (
Run Code Online (Sandbox Code Playgroud)

或者只是更改该.mp3扩展名以更好地匹配您的文件命名约定。