2

У меня есть файлы с камеры 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

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

GP0000\GPFR0000.jpg
GP0000\...
GP1153\GPFR1153.LRV
GP1153\GPFR1153.MP4
GP1153\...
GP142857\GPQZ142857.FOO

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

# if run from "P:\Gopro\2018", 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:\images\GPBK1153.*"

    # 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:\images\1234567890.jpg" to the new folder "c:\images\1\234\567\890\"
    move-item $image -Destination $destinationfolderpath

    # the image is now available at "P:\Gopro\2018\1153\GPBK1153.*"
}

1 ответ1

0

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

# If run from "P:\Gopro\2018", 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:\Gopro\2018\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 '(..)..(.*)','$1$2'

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

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

    # The file is now available at "P:\Gopro\2018\GP1153\GPBK1153.FOO".
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .