如何修改Paul Black的随机文件选择批处理脚本以避免选中自身
如何修改Paul Black的随机文件选择批处理脚本以避免选中自身
嘿,我完全懂你的烦恼——这个脚本偶尔会选中自己,导致播放中断,确实挺闹心的。别担心,只需要几个小改动就能解决问题,让它自动跳过自身的.bat文件。
咱们先看看核心问题:原脚本用for %%f in (*.*)遍历当前文件夹的所有文件,自然会把它自己也包含进去。所以我们只需要在循环里加个判断,把脚本自身排除在候选列表外就行。
下面是修改后的完整脚本,我标出来了关键改动:
@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. # :: # Modified: Exclude the batch script itself from selection # :: ############################################################################## title Select A Random Filename. mode con: cols=80 lines=5 & color 17 setlocal EnableDelayedExpansion :: 获取当前批处理脚本的完整文件名(包括扩展名) set "currentScript=%~nx0" set n=0 for %%f in (*.*) do ( :: 判断当前文件是否是脚本自身,不是才加入候选列表 if not "%%f"=="!currentScript!" ( set /A n+=1 set "file[!n!]=%%f" ) ) :: 容错处理:如果没有可选文件就提示用户 if !n! equ 0 ( echo. & echo 没有可选择的有效文件! echo. & echo ^>Press ANY key to EXIT . . . & pause >nul & exit ) set /A "RAND=(n*%Random%)/32768+1" echo. & echo "!file[%RAND%]!" echo. & echo ^>Press ANY key to EXIT . . . & pause >nul & exit
关键改动说明:
set "currentScript=%~nx0":这行命令用批处理的特殊变量%~nx0获取当前脚本的完整文件名(比如你的脚本叫random.bat,这行就会把currentScript设为这个值)。- 循环里的
if not "%%f"=="!currentScript!":每次遍历文件时都会做检查,只有当文件不是脚本自身时,才会把它加入到候选文件列表里。 - 新增的
if !n! equ 0判断:如果当前文件夹里除了脚本没有其他文件,会直接提示用户,避免后续随机数计算出错导致异常。
这样修改后,脚本就再也不会选中自己啦,你可以放心用它来选音频文件播放~
备注:内容来源于stack exchange,提问作者typecrazy789
相关产品推荐
相关产品推荐

