我是一位正在学习编程的艺术家,我想创建一个批处理文件,该文件将从我的reference文件夹中选择一个随机图片文件。目的是获得一张随机图片进行研究。我环顾四周,我看到的答复很难理解,并且经常与不需要的其他功能联系在一起。简而言之,我如何制作一个从文件夹(和子文件夹)中打开随机图片文件的批处理文件?我是否需要索引每张图片,然后从中选择一个,还是可以只使用%random%来打开它?
感谢您的帮助。
答案 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 "" "%%$[%#%]%%"
您可能需要根据需要调整行2
和3
,(但不要删除或添加任何双引号)。
答案 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
,?-Include
和Get-Random至少需要PowerShell版本3.0
根据this link中的表,您需要将Window 7 PowerShell v2升级到至少V3,Windows 8或更高版本应该可以毫无问题地运行脚本。
但是我建议并行升级到5.1,甚至可能升级到install PowerShell 6.0(核心)。