从设置目录中打开随机文件夹

时间:2018-04-09 18:35:14

标签: batch-file

如何创建在特定目录中打开随机文件夹的批处理脚本?这里的代码打印出一个随机选择的文件(我需要它来打开文件夹,而不是文件),但我无法弄清楚如何打开它。

@Echo Off

:Start
set directory="D:\Movies"
set count=0
for /f %%f in ('dir "%directory%" /b /s') do set /a count+=1
set /a randN=%random% %% %count% +1
set listN=0

for /f "tokens=1* delims=:" %%I in ('dir "%directory%" /a-d /b /s^| findstr /n /r . ^| findstr /b "%randN%"') do set filename=%%J

:Found
echo %filename%
pause
goto Start

我突然意识到我做错了什么并解决了问题。这是最终的和有效的代码:

@Echo Off

:Start
set directory="D:\Film"
set count=0
for /f %%f in ('dir "%directory%" /ad /b /s') do set /a count+=1
set /a randN=%random% %% %count% +1
set listN=0

for /f "tokens=1* delims=:" %%I in ('dir "%directory%" /ad /b /s^| findstr /n /r . ^| findstr /b "%randN%"') do set filename=%%J

:Found
%SystemRoot%\explorer.exe %filename%
exit /b

goto Start

1 个答案:

答案 0 :(得分:1)

你真的不需要增加一个计数并使用findstr来完成这样的任务;只需分配和sort随机数应该:

@Echo Off
Set "source=D:\Film"

SetLocal EnableDelayedExpansion
For /D %%A In ("%source%\*") Do Set "$[!RANDOM!]=%%A"
For /F "Tokens=1* Delims==" %%A In ('"Set $[ 2>Nul|Sort"'
) Do Set "target=%%B" & GoTo Found
Exit /B

:Found
Explorer "%target%"

如果您想要递归目录搜索,请将行5更改为:

For /D /R "%source%" %%A In (*) Do Set "$[!RANDOM!]=%%A"