使用批处理从文件夹中打开一个随机文件

时间:2018-07-23 21:52:18

标签: image batch-file command-line

我是一位正在学习编程的艺术家,我想创建一个批处理文件,该文件将从我的reference文件夹中选择一个随机图片文件。目的是获得一张随机图片进行研究。我环顾四周,我看到的答复很难理解,并且经常与不需要的其他功能联系在一起。简而言之,我如何制作一个从文件夹(和子文件夹)中打开随机图片文件的批处理文件?我是否需要索引每张图片,然后从中选择一个,还是可以只使用%random%来打开它?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是您需要的基本批处理文件结构:

@Echo Off
Set "SrcDir=C:\Users\Jiosen\references"
Set "ExtLst=*.jpeg *.png *.tiff"
Set "i=0"
For /F "Delims=" %%A In ('Where /R "%SrcDir%" %ExtLst%') Do (Set /A i+=1
    Call Set "$[%%i%%]=%%A")
Set /A #=(%Random%%%i)+1
Call Start "" "%%$[%#%]%%"

您可能需要根据需要调整行23(但不要删除或添加任何双引号)

答案 1 :(得分:0)

@SETLOCAL ENABLEDELAYEDEXPANSION
rem @CD C:\newfolder
@set count=0
@For /f "delims=" %%A in ('dir C:\users\*.* /ad /s /b') Do (
@    set /a count=!count!+1
@rem     If !Count! gtr 1 echo Num of folders
)

@Set /a num=%random% %% %Count% + 1 
Echo %num% / %count%

For /f "skip=%num% delims=" %%A in ('dir C:\users\*.* /ad /s /b') Do (
Echo this is nth random folder
Echo Copy "%~dpnx0" "%%A"
rem Exit /b
)
pause

%Random%给我们一个从0到32K的随机数。 @Set /a num=%random% %% %Count% + 1使用32K的模除法(即除法的余数)除以多少,将得到0到count范围内的随机数。然后将1加到count +1(文件夹数)中。然后skip=%num%首先跳过多少个文件夹,读取下一个,然后退出循环。

这仅限于32K文件夹。有关如何列出文件和子文件夹中的文件的信息,请参见Dir /?。上方的每个命令加上/?均可获得帮助。有关CMD备忘单,请参见http://stackoverflow.com/questions/41030190/command-to-run-a-bat-file/41049135#41049135

答案 2 :(得分:0)

PowerShell在选择树中的文件并获取随机文件时效率更高,所以为什么不从批处理中使用它。

Compo批为模板:

:: Q:\Test\2018\07\24\SO_51487674.cmd
@Echo Off
PushD "C:\Users\Jiosen\references"
Set "ExtLst=*.jpg,*.jpeg,*.png,*.tiff"

For /F "Delims=" %%A In ('
powershell -Nop -C "(Get-ChildItem * -R -File -Incl %ExtLst%|Get-Random).FullName"
') Do Start "" "%%A"

Get-ChildItem参数-File,?-IncludeGet-Random至少需要PowerShell版本3.0

根据this link中的表,您需要将Window 7 PowerShell v2升级到至少V3,Windows 8或更高版本应该可以毫无问题地运行脚本。
但是我建议并行升级到5.1,甚至可能升级到install PowerShell 6.0(核心)。