标题: [其他] 【已解决】批处理怎样随机获取指定目录图片的完整路径(含后缀)?谢谢 [打印本页]
作者: yyz219 时间: 6 天前 08:28 标题: 【已解决】批处理怎样随机获取指定目录图片的完整路径(含后缀)?谢谢
本帖最后由 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
=====================
谢谢
作者: Five66 时间: 6 天前 09:28
请确保文件夹内都是图片文件
文件夹图片数量32767以内
不包括子文件
不包括隐藏文件
图片文件名不能包含英文感叹号等特殊字符
//- @echo off&setlocal
-
- set "_@@path=D:\123"
-
- setlocal enabledelayedexpansion
- for %%i in ("%_@@path%\*") do (
- set /a @@n+=1
- set /a @@r=32767/@@n+1
- if !random! lss !@@r! set "_@randomfile=%%i"
- )
- echo,!_@randomfile!&endlocal
- endlocal&pause&exit/b
复制代码
作者: yyz219 时间: 6 天前 09:32
回复 2# Five66
我试一试先 谢谢
作者: aloha20200628 时间: 6 天前 09:40
本帖最后由 aloha20200628 于 2025-1-27 10:33 编辑
回复 1# yyz219
先获取当前目录中图片文件总数n,再从1-n之间随机抽取一个对应dir文件列表的行号 r …- @echo off &setlocal
- cd /d "d:\123" &dir /b/a-d *.jpg>#
- 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=")<#
- echo,随机抽取序号=%r% 》%jF%
- del /q "#"&pause&exit/b
复制代码
作者: yyz219 时间: 6 天前 12:00
2楼、4楼都可以
4楼————特殊字符也行
作者: yyz219 时间: 6 天前 12:39
回复 4# aloha20200628
怎样增加其它格式(比如.png)的图片?谢谢
作者: yyz219 时间: 6 天前 12:46
回复 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
作者: ygqiang 时间: 6 天前 14:14
本帖最后由 ygqiang 于 2025-1-27 14:26 编辑
回复 7# yyz219
目录下好几个jpg图片,每次执行都可以随机获取到其中一张照片。
但是:
pecmd.exe wall %随机%
这个命令,win10系统下,执行后,桌面背景变成纯黑的了。
重复运行,一直这样。
对随机获取到的照片格式,有什么要求吗?
好像系统的操作逻辑是:
原图片转码后,生成新图片,再设为桌面背景
作者: Five66 时间: 6 天前 14:20
回复 7# yyz219
说一下
for...*(2楼)或dir(4楼)的输出是有序的 ,直接使用时其实不怎么随机...
输出到文件时 , 当前代码页无法表示的字符会变成?号(例如文件名包含♪ ♥等字符) , 使用该文件时内容作为路径时可能会出错(可能包含了?号)
作者: yyz219 时间: 6 天前 14:34
回复 8# ygqiang
你的系统里必须有pecmd.exe(没有的话,在PE中复制一个过去)
作者: ygqiang 时间: 6 天前 15:27
回复 10# yyz219
这个都有的。
作者: yyz219 时间: 5 天前 21:09
回复 4# aloha20200628
能不能弄成不需要文件 # ?
谢谢
作者: Five66 时间: 5 天前 22:42
2楼的改了下 , 应该支持特殊字符了- @echo off&rem {
- setlocal
-
- set "_@@path=D:\123"
-
- rem 全部是图片的话"%_@@path%\*"更省事 //
- for %%i in ("%_@@path%\*.jpg" "%_@@path%\*.png") do (
- set /a @@n+=1
- set /a @@r=32767/@@n+1
- setlocal enabledelayedexpansion
- if !random! lss !@@r! (
- endlocal
- set "_@randomfile=%%i"
- ) else endlocal
- )
- for %%i in ("%_@randomfile%") do echo,%%~i
- endlocal&rem }
- pause&exit/b
复制代码
作者: aloha20200628 时间: 5 天前 23:17
回复 12# yyz219
4楼代码是出于运行效率的考虑而采用临时文件,否则当目录中图片文件过千上万+,造成大数据循环操作都挤在 for ... ('命令管道') 的 ‘管道’ 里而导致明显降速甚至滞塞...
以下代码是针对小数据实况不用临时文件的版本- @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 "jF=%%b"
- echo,随机抽取序号=%r% 》%jF%
- pause&exit/b
复制代码
作者: yyz219 时间: 4 天前 07:08
回复 14# aloha20200628
我试一试 谢谢
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |