[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 【已解决】批处理怎样随机获取指定目录图片的完整路径(含后缀)?谢谢

本帖最后由 yyz219 于 2025-1-29 07:38 编辑

已解决:

@echo off &setlocal &cd /d "D:\!123"
for /f %%n in ('dir /b/a-d *.jpg *.png^|find /c /v "" ') do (set "n=%%n")
set/a "r=1+%random%%%%n%"
for /f "tokens=1* delims=]" %%a in ('dir /b/a-d *.jpg *.png^|find /n /v ""^|find "[%r%]" ') do set "随机=%%b"

pecmd.exe wall %随机%
exit/b



2楼、4楼都可以
14楼————特殊字符也行

=================================
问题:
怎样随机获取指定目录图片的完整路径(含后缀)?谢谢
==================================
假设目录是:D:\123  (里面有多个图片文件)
需要随机获取路径形式:D:\123\黄昏.jpg
=====================
谢谢
我是小白,希望老师多多帮助

请确保文件夹内都是图片文件
文件夹图片数量32767以内
不包括子文件
不包括隐藏文件
图片文件名不能包含英文感叹号等特殊字符

//
  1. @echo off&setlocal
  2. set "_@@path=D:\123"
  3. setlocal enabledelayedexpansion
  4. for %%i in ("%_@@path%\*") do (
  5. set /a @@n+=1
  6. set /a @@r=32767/@@n+1
  7. if !random! lss !@@r! set "_@randomfile=%%i"
  8. )
  9. echo,!_@randomfile!&endlocal
  10. endlocal&pause&exit/b
复制代码
1

评分人数

TOP

回复 2# Five66


    我试一试先 谢谢
我是小白,希望老师多多帮助

TOP

本帖最后由 aloha20200628 于 2025-1-27 10:33 编辑

回复 1# yyz219

先获取当前目录中图片文件总数n,再从1-n之间随机抽取一个对应dir文件列表的行号 r …
  1. @echo off &setlocal
  2. cd /d "d:\123" &dir /b/a-d *.jpg>#
  3. for /f %%n in ('find /c /v ""^<#') do (set "n=%%n")
  4. set/a "r=1+%random%%%%n%"
  5. (for /l %%k in (1,1,%r%) do set/p "jF=")<#
  6. echo,随机抽取序号=%r% 》%jF%
  7. del /q "#"&pause&exit/b
复制代码
1

评分人数

TOP

2楼、4楼都可以
4楼————特殊字符也行
我是小白,希望老师多多帮助

TOP

回复 4# aloha20200628


    怎样增加其它格式(比如.png)的图片?谢谢
我是小白,希望老师多多帮助

TOP

回复 6# yyz219

解决了:
@echo off &setlocal
cd /d "D:\!123" &dir /b/a-d *.jpg *.png>#
for /f %%n in ('find /c /v ""^<#') do (set "n=%%n")
set/a "r=1+%random%%%%n%"
(for /l %%k in (1,1,%r%) do set/p "jF=")<#

set "随机=%jF%"
pecmd.exe wall %随机%
del /q "#"&exit/b
我是小白,希望老师多多帮助

TOP

本帖最后由 ygqiang 于 2025-1-27 14:26 编辑

回复 7# yyz219



目录下好几个jpg图片,每次执行都可以随机获取到其中一张照片。
   
但是:
pecmd.exe wall %随机%

这个命令,win10系统下,执行后,桌面背景变成纯黑的了。
重复运行,一直这样。
对随机获取到的照片格式,有什么要求吗?

好像系统的操作逻辑是:
原图片转码后,生成新图片,再设为桌面背景

TOP

回复 7# yyz219


   
说一下
for...*(2楼)或dir(4楼)的输出是有序的 ,直接使用时其实不怎么随机...
输出到文件时 , 当前代码页无法表示的字符会变成?号(例如文件名包含♪ ♥等字符) , 使用该文件时内容作为路径时可能会出错(可能包含了?号)
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 8# ygqiang


    你的系统里必须有pecmd.exe(没有的话,在PE中复制一个过去)
我是小白,希望老师多多帮助

TOP

回复 10# yyz219

这个都有的。

TOP

回复 4# aloha20200628
能不能弄成不需要文件 # ?

谢谢
我是小白,希望老师多多帮助

TOP

2楼的改了下 , 应该支持特殊字符了
  1. @echo off&rem {
  2. setlocal
  3. set "_@@path=D:\123"
  4. rem 全部是图片的话"%_@@path%\*"更省事 //
  5. for %%i in ("%_@@path%\*.jpg" "%_@@path%\*.png") do (
  6. set /a @@n+=1
  7. set /a @@r=32767/@@n+1
  8. setlocal enabledelayedexpansion
  9. if !random! lss !@@r! (
  10. endlocal
  11. set "_@randomfile=%%i"
  12. ) else endlocal
  13. )
  14. for %%i in ("%_@randomfile%") do echo,%%~i
  15. endlocal&rem     }
  16. pause&exit/b
复制代码

TOP

回复 12# yyz219

4楼代码是出于运行效率的考虑而采用临时文件,否则当目录中图片文件过千上万+,造成大数据循环操作都挤在 for ... ('命令管道') 的 ‘管道’ 里而导致明显降速甚至滞塞...
以下代码是针对小数据实况不用临时文件的版本
  1. @echo off &setlocal &cd /d "d:\123"
  2. for /f %%n in ('dir /b/a-d *.jpg *.png^|find /c /v "" ') do (set "n=%%n")
  3. set/a "r=1+%random%%%%n%"
  4. for /f "tokens=1* delims=]" %%a in ('dir /b/a-d *.jpg *.png^|find /n /v ""^|find "[%r%]" ') do set "jF=%%b"
  5. echo,随机抽取序号=%r% 》%jF%
  6. pause&exit/b
复制代码
1

评分人数

TOP

回复 14# aloha20200628


    我试一试 谢谢
我是小白,希望老师多多帮助

TOP

返回列表