在寻找最终解决方案以随机化登录屏幕的过程中,作为对保留 Windows 10 锁屏聚光灯图片但关闭所有文本提示/气球,我正在寻求帮助,我对批处理的世界还很陌生,但我认为完成后它将是一个有用的解决方案。
现在根据与@KeithMiller 的讨论,将这个问题扩展到 power shell
Windows 批处理文件或 powershell 文件可以:
- 复制 12 张随机 jpg 图像并重命名到新位置
- 无重复
- 实际上是随机的
- 即使从 700 到 1500 个文件中进行选择,也只需几秒钟即可快速运行。
- 搜索 .jpg
- .Jpg 文件名未知,因此可以选择任何文件或将其添加到文件夹中。
- 将 12 张图片重命名为新位置,一半为 .jpg,一半为 .png:img100.jpg、img101.jpg、img102.jpg、img103.jpg、img104.jpg、img105.jpg 以及 img100.png、img101.png、img102.png、img103.png、img104.png、img105.png
Note: Windows 10 will still uses the jpgs as png even though they are renamed. With this solution there will be up to 12 random background user lock screen, and also, as far as I have tested this allows for the 5 cache images under lock screen settings.
Powershell 随机将 12 张图像复制到新位置(.PS1)
$d = gci "C:\Test\A\*.jpg" | resolve-path | get-random -count 12
Copy-Item $d -destination C:\Test\B
从堆栈交换,已经可以无重复运行,现在只需要找出路径以进行重命名。找到可能有帮助的代码:
foreach ($file in $sourcefiles)
{
$newdir = $file.DirectoryName.Replace( $sourcepath, $destination )
If (-not (test-path $newdir))
{
md $newdir
}
Copy-Item -Path $file.FullName -Destination $newdir
}
批处理代码用于计数文件,然后产生 12 个随机数。
@for /f %%G in ('2^>nul dir "C:\test\A\*.jpg" /a-d/b/-o/-p/s^|find /v /c ""') do set N=%%G
@echo Total files: %N%
@echo off & setlocal EnableDelayedExpansion
for /L %%a in (1 1 12) do (
call:rand 1 %N%
echo !RAND_NUM!
)
goto:EOF
REM The script ends at the above goto:EOF. The following are functions.
REM rand()
REM Input: %1 is min, %2 is max.
REM Output: RAND_NUM is set to a random number from min through max.
:rand
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF
- 虽然我认为这是一种快速计算图像数量并得出一个数字来选择的好方法,但这并不能解释重复的情况。
我之前为此做出的解决方案要感谢@DavidPostill
此解决方案适用于大约 150 张图像,但不幸的是运行时间太长了。我犯了一个错误,抱歉,我不知道 Windows 10 幻灯片会自行随机化图像。
我确实尽了最大努力研究这个主题,尽管编码仍然超出了我的能力范围,因此任何帮助都将不胜感激。我在下面列出了阅读/研究内容...
阅读与研究:
- Computing.net - 如何从 100 多个文件夹中复制 6 个随机文件?
- 将 50 个随机 mp3 文件从一个文件夹批量复制到另一个文件夹?
- 将随机文件复制到另一个文件夹
- 如何使用批处理文件将随机图像复制到另一个文件夹?
- 批处理脚本:如何设置要复制或移动的文件数量
- 批量选择随机文本文件
- 随机选择 15 个文件并将其复制到输出文件夹
- 随机挑选文件并批量移动到另一个文件夹
- 递归地将一个随机文件复制到另一个文件夹
- 选择一个随机文件并复制到另一个文件夹
- 从文件夹中随机选择文件并将其移动到另一个文件夹
- 批处理代码在循环内不起作用
- 批处理文件执行需要多长时间?
- 批处理文件将文件从一个文件夹复制到另一个文件夹
- 计算文件夹中文件的数量并存储在变量中
- 计数并将结果输出到文本文件的批处理文件
- 从命令行计算文件夹和子文件夹中的文件数量
- 将随机文件复制到另一个文件夹
- 批量-从位置 A 随机复制 10 个文件中的 1 个到位置 B?
- 如何仅循环批处理脚本一定次数?
- 用于复制并保留重复项的 Windows 批处理文件
- 是否可以按特定顺序“批量”复制文件?
- 使用批处理脚本从文件夹和子文件夹中打开随机文件
- 批处理文件将文件从一个文件夹复制到另一个文件夹
- 对单个文件制作多个副本,并为每个副本批量分配一个唯一的文件名
- 如何批量将文件从一个文件夹按顺序复制到另一个文件夹?
- 复制文件的最快方法
- 批次中的随机生成器
- 如何在 BATCH 脚本中使用随机?
- 简短的命令行提示(批处理文件)
- WikiBooks Windows 批处理脚本
- cmd 文件中 % 和 %% 有什么区别?
- 批处理文件中多个文件名的条件 IF EXIST 语句
- ss64 复制
- ss64 复制
- ss64 随机数
- ss64 开始
- ss64 对于
答案1
这应该接近你想要的:
$SelectCount = 12
$SourcePath = "C:\test\A\*.jpg"
$DestPath = 'C:\test\Renamed'
If (!(test-path $DestPath)) {md $DestPath | out-null}
$files = Get-ChildItem -path $SourcePath -file -recurse | Get-Random -count $SelectCount
for ($i = 0; $i -lt $files.count; $i += 2) {
copy-item $files[$i] -destination ('{0}\file{1:000}.jpg' -f $DestPath, ($i/2+100)) -whatif
copy-item $files[$i+1] -destination ('{0}\file{1:000}.png' -f $DestPath, ($i/2+100)) -whatif
}
-whatif
如果您希望实际执行复制项语句,请从其中删除参数。
基思