如何将 12 张随机 jpg 复制到文件夹并通过批处理或 powershell 快速重命名(Windows 10 Spotlight 相关)

如何将 12 张随机 jpg 复制到文件夹并通过批处理或 powershell 快速重命名(Windows 10 Spotlight 相关)

在寻找最终解决方案以随机化登录屏幕的过程中,作为对保留 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


     }

来自微软 Technet


批处理代码用于计数文件,然后产生 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

计数 JPG 并给出随机数

  • 虽然我认为这是一种快速计算图像数量并得出一个数字来选择的好方法,但这并不能解释重复的情况。

这是基于帖子这里这里


我之前为此做出的解决方案要感谢@DavidPostill

此解决方案适用于大约 150 张图像,但不幸的是运行时间太长了。我犯了一个错误,抱歉,我不知道 Windows 10 幻灯片会自行随机化图像。

我确实尽了最大努力研究这个主题,尽管编码仍然超出了我的能力范围,因此任何帮助都将不胜感激。我在下面列出了阅读/研究内容...


阅读与研究:

答案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如果您希望实际执行复制项语句,请从其中删除参数。

基思

相关内容