Как скопировать 12 случайных jpgs в папку и быстро переименовать в пакетном режиме или PowerShell (Windows 10 Spotlight Related)

В поисках окончательного решения по рандомизации экранов входа в систему в качестве части ответа на заставку "Блокировать экран блокировки Windows 10", но отключить все текстовые подсказки / всплывающие подсказки, я ищу помощь, я все еще очень новичок в мире пакетных решений, хотя думаю, что это будет полезным решением, когда закончите.

Теперь распространяем этот вопрос на Power Shell, как описано в @KeithMiller.

Пакетный файл 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

из Stack Exchange, уже работает без дубликатов, теперь нужно только выяснить, чтобы отделить пути для переименования. Найден возможный код, который может помочь:

foreach ($file in $sourcefiles)
    {
    $newdir = $file.DirectoryName.Replace( $sourcepath, $destination )

     If (-not (test-path $newdir))
     {
        md $newdir
     }

      Copy-Item -Path $file.FullName -Destination $newdir


     }

от Microsoft 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

  • Это не учитывает дубликаты, хотя я подумал, что это будет хороший способ быстро посчитать изображения и придумать номер для выбора.

это основано на посте здесь и здесь


Предыдущее решение, которое я сделал для этого, было благодаря @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 параметры из операторов copy-item, если вы хотите, чтобы они действительно выполнялись.

Кит

Другие вопросы по тегам