Переместить файлы в папку, названную частью имени файла

у меня есть файлы с камеры GoPro Fusion
которые представляют собой изображения и фильмы. 
Имена похожи

GP                                          (for “GoPro”)
(two more letters of no particular significance)
(a series of digits; maybe four or six digits)
.                                           (a period)
(an extension)

некоторые из расширений являются общими,
как JPG,MP4 и WAV; другие являются редкостью. 
Некоторые примеры имен файлов GPFR0000.jpg,GPBK0000.jpg,GPFR0000.gpr,GPFR1153.MP4,GPFR1153.THM и GPBK142857.WAV
Но расширения не имеют отношения к этому вопросу.

для каждого изображения и видео есть набор файлов
имена которых имеют такую же серию десятичные знаки
прямо перед продлением. 
Так, например, GPFR1153.LRV и GPBK1153.MP4
принадлежат к одному набору.

я хочу, чтобы все файлы из каждого набора были сгруппированы в каталог
которого зовут GP последовал ряд цифр. 
Например, если у меня

GPFR0000.jpg
GPBK0000.jpg
GPFR0000.gpr
GPFR0000.gpr
GPFR1153.LRV
GPFR1153.MP4
GPFR1153.THM
GPBK1153.WAV
GPBK1153.MP4
GPQZ142857.FOO

все в одном каталоге, результат должен быть

GP0000GPFR0000.jpg
GP0000...
GP1153GPFR1153.LRV
GP1153GPFR1153.MP4
GP1153...
GP142857GPQZ142857.FOO

возможно ли это с помощью скрипта (для Windows 10)? 
Я нашел этот (PowerShell) скрипт mousio на
рекурсивно перемещать тысячи файлов в подпапки windows,
но это решает немного другую проблему,
и я хотел был бы помочь приспособить его к моим требованиям
(Я художник, а не программист).

# if run from "P:Gopro18", we can get the image list
$images = dir *.jpg

# process images one by one
foreach ($image in $images)
{
    # suppose $image now holds the file object for "c:imagesGPBK1153.*"

    # get its file name without the extension, keeping just "GPBK1153"
    $filenamewithoutextension = $image.basename

    # group by 1 from the end, resulting in "1153"
    $destinationfolderpath = 
        $filenamewithoutextension -replace '(....)$','$1'

    # silently make the directory structure for "1153 GPBK1153"
    md $destinationfolderpath >$null

    # move the image from "c:images34567890.jpg" to the new folder "c:images470"
    move-item $image -Destination $destinationfolderpath

    # the image is now available at "P:Gopro1853GPBK1153.*"
}
23
задан Scott
01.03.2023 19:11 Количество просмотров материала 3455
Распечатать страницу

1 ответ

основываясь на моем (возможно, ошибочном) понимании того, что вы хотите, это можно сделать с помощью следующего сценария PowerShell.  Обратите внимание, что это является производным от работы mousio, размещен на рекурсивно перемещать тысячи файлов в подпапки windows.

# If run from "P:\Gopro18", we can get the file list.
$images = dir GP*

# Process files one by one.
foreach ($image in $images)
{
    # Suppose $image now holds the file object for "P:\Gopro18\GPBK1153.FOO"

    # Get its file name without the extension, keeping just "GPBK1153".
    $filenamewithoutextension = $image.basename

    # Grab the first two characters (which we expect to be "GP"),
    # skip the next two characters (which we expect to be letters; e.g., "BK"),
    # then grab all the characters after that (which we expect to be digits; e.g., "1153")
    # and put them together, resulting in "GP1153".
    $destinationfolderpath = 
        $filenamewithoutextension -replace '(..)..(.*)',''

    # Silently make the directory structure for "GP1153".
    md $destinationfolderpath > $null 2>&1

    # Move the file from "P:\Gopro18\GPBK1153.FOO" to the new folder "P:\Gopro18\GP1153"
    move-item $image -Destination $destinationfolderpath

    # The file is now available at "P:\Gopro18\GP1153\GPBK1153.FOO".
}
0
отвечен Scott 2023-03-03 02:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

gopro
powershell
script
windows
windows-10
Вверх