Переместить копию неизвестного имени изображения и переименовать - Powershell или Batch Script
- Скопируйте первые десять файлов JPG в папке в алфавитно-цифровом порядке в новую папку без предварительного знания имен файлов JPG.
- Присвойте каждому файлу десять новых имен в определенных местах, например, "e100.jpg" - "e110.jpg".
- Решение Powershell или пакетного сценария для запуска в среде Windows.
Текущее исследование по связанным постам обмена стека:
SO - Powershell, чтобы выбрать случайные файлы из папки и переместить их в другую папку
SU - Как дополнительно скопировать и переименовать файл в Windows?
SU - Скрипт PowerShell для переименования - Копировать - Переместить
Массовое переименование файлов в PowerShell с последовательными числовыми суффиксами
Если бы я угадал решение, основанное на исследовании, так как мои навыки кодирования не очень хороши, я думаю, что одно из решений выглядело бы примерно так:
Powershell
$excludealreadycopieditems = @()
$sourcefolder = "C:\SYS1"
$destinationFolder = "C:\SYS2"
$maxitems = 10
#Calculate how many folders should be created:
$folderstocreate = [math]::Ceiling((get-childitem $sourcefolder\*.jpg).count / $maxitems)
#Copy the items (if moving in stead of copy use Move-Item)
get-childitem $sourcefolder\*.jpg -Exclude $excludealreadycopieditems | sort-object name | select -First $maxitems | Copy-Item -Destination $destinationFolder$i ;
#Exclude the already copied items:
$excludealreadycopieditems = $excludealreadycopieditems + (get-childitem $destinationFolder$i\*.jpg | select -ExpandProperty name)
}
ls *jpg | Foreach {$i=1} {Rename-Item _ -NewName ("$($.100){$:110#} .jpg" -f $i++) -whatif}
CMD
@ECHO OFF
SET SrcCount=0
SET SrcMax=10
FOR %F IN (C:\SYS1\*.jpg) DO IF !SrcCount! LSS %SrcMax% (
SET /A SrcCount += 1
ECHO !SrcCount! COPY %F C:\SYS2
COPY %F C:\temp\output
)
ren *.jpg e100.* e103.* e104.* e105.* e106.* e107.* e108.* e109.* e110.*
2 ответа
Как я могу скопировать 10 файлов в новый каталог и переименовать их с шаблоном?
Используйте следующий пакетный файл (test.cmd):
@echo off
setlocal EnableDelayedExpansion
set "source_dir=f:\test\jpg"
set "target_dir=f:\test\target"
for /f "tokens=*" %%f in ('dir /b %source_dir%\*.jpg') do (
set /a "count+=1"
set /a "target_count=!count!+100"
copy "%source_dir%\%%f" "!target_dir!\e!target_count!.jpg" > nul
if !count! EQU 10 goto :done
)
rem finished
:done
endlocal
Заметки:
- + Изменить
source_dir
а такжеtarget_dir
при необходимости
Пример:
> dir jpg
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test\jpg
12/03/2019 11:39 <DIR> .
12/03/2019 11:39 <DIR> ..
12/03/2019 11:34 4,429 Test_image (01).jpg
12/03/2019 11:34 4,429 Test_image (02).jpg
12/03/2019 11:34 4,429 Test_image (03).jpg
12/03/2019 11:34 4,429 Test_image (04).jpg
12/03/2019 11:34 4,429 Test_image (05).jpg
12/03/2019 11:34 4,429 Test_image (06).jpg
12/03/2019 11:34 4,429 Test_image (07).jpg
12/03/2019 11:34 4,429 Test_image (08).jpg
12/03/2019 11:34 4,429 Test_image (09).jpg
12/03/2019 11:34 4,429 Test_image (10).jpg
12/03/2019 11:34 4,429 Test_image (11).jpg
12/03/2019 11:34 4,429 Test_image (12).jpg
12/03/2019 11:34 4,429 Test_image (13).jpg
12/03/2019 11:34 4,429 Test_image (14).jpg
12/03/2019 11:34 4,429 Test_image (15).jpg
12/03/2019 11:34 4,429 Test_image (16).jpg
16 File(s) 70,864 bytes
2 Dir(s) 1,005,493,501,952 bytes free
> test
> dir target
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test\target
12/03/2019 12:07 <DIR> .
12/03/2019 12:07 <DIR> ..
12/03/2019 11:34 4,429 e101.jpg
12/03/2019 11:34 4,429 e102.jpg
12/03/2019 11:34 4,429 e103.jpg
12/03/2019 11:34 4,429 e104.jpg
12/03/2019 11:34 4,429 e105.jpg
12/03/2019 11:34 4,429 e106.jpg
12/03/2019 11:34 4,429 e107.jpg
12/03/2019 11:34 4,429 e108.jpg
12/03/2019 11:34 4,429 e109.jpg
12/03/2019 11:34 4,429 e110.jpg
10 File(s) 44,290 bytes
2 Dir(s) 1,005,493,379,072 bytes free
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD | SS64.com
- Команды CMD для Windows (по категориям) - CMD для Windows - SS64.com
- Копирование файлов - Windows CMD - SS64.com
- Dir - список файлов и папок - Windows CMD - SS64.com
- EnableDelayedExpansion - Windows CMD - SS64.com
- For - Циклический вывод команды - Windows CMD - SS64.com
Таким образом, вы провели исследование достаточно много, но без оценки ваших результатов это не стоит.
В дисках, отформатированных в NTFS, подразумевается буквенно-цифровая сортировка.
PowerShell:
Get-ChildItem -Path C:\Sys1 -Filter *.jpg -File |
Sort-Object Name | Select-Object -First 10 |
ForEach-Object -Begin {$i=100} -Process {
Copy-Item -Path $_ -Destination (Join-Path "C:\Sys2" ("e{0:D3}{1}" -f $i++,$_.Extension)) -WhatIf
}
Если вывод выглядит нормально, удалите -WhatIf