копирование файлов из подпапок и переименование - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужна помощь с задачей.

Мне нужно скопировать экспортированный файл из подкаталогов в новую папку и переименовать их.Проблема заключается в том, что все экспортируемые файлы имеют одинаковое имя, и оно достигает 500

--Old Folder
 ---Export1
    ---Scan.TIF
 ---Export2
    ---Scan.TIF
 ---Export3
    ---Scan.TIF

. Я пробовал следующую ссылку, которая работала нормально, но данные были бы повсюду.Например, скопированный и переименованный файл в новой папке с именем, например, SCAN13.TIF, фактически будет документом из подкаталога Export24

https://sumtips.com/snippets/powershell/copy-files-rename-duplicates-subfolder/

Мне нужна помощь со сценарием, которыйможет скопировать файл из всех подкаталогов в новое местоположение, переименовать и сопоставить данные

Это выполнимо с помощью сценариев или будет инструмент для этого?

Спасибо за вашевремя

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Этот сценарий использует регулярное выражение для получения конечного номера имени каталога файлов scan.tif.
Оператор -match сохраняет группу захвата RegEx () в коллекции $ Matches, которая используется для построения места назначенияимя с оператором -f(ormat).

## Q:\Test\2018\12\07\SO_53661264.ps1
$Src = "A:\Old Folder"
$Dst = "A:\New Folder"

Set-Location $Src
Get-ChildItem Scan.tif -Recurse -File |
  Where {$_.Directory.Name -match 'Export(\d+)$'} |
    Copy-Item -Destination {Join-Path $Dst ("Scan{0}.TIF" -f $Matches[1])} -WhatIf

Если вывод выглядит нормально, удалите / закомментируйте конечный параметр -WhatIf.

Пример tree /f моего виртуального диска после запуска сценария:

> tree /F \
Auflistung der Ordnerpfade für Volume RamDisk
├───New Folder
│       Scan1.TIF
│       Scan2.TIF
│       Scan3.TIF
│
└───Old Folder
    ├───Export1
    │       Scan.TIF
    │
    ├───Export2
    │       Scan.TIF
    │
    └───Export3
            Scan.TIF
0 голосов
/ 31 мая 2019

Вы можете попробовать это сначала

Помещает имя папки в начало имени файла

Get-ChildItem <Directory of File> -Filter *.ext -Recurse | Rename-Item -NewName {$_.Directory.Name+'_'+$_.Name}

Это не весь ответ, который вы ищете, но, надеюсь, кусокчто вам нужно.

0 голосов
/ 07 декабря 2018

Если я правильно вас понял, должно работать следующее:

$source = "C:\test"
$Destination = "C:\Users\user\Documents\Tests"

$i = 1

foreach ($file in (Get-ChildItem -Recurse $source -Filter *.TIF)) {
    Copy-Item $file.FullName -Destination "$destination\Scan$i.TIF"
    $i++
}

Вам нужно будет изменить $source и $destination переменные.Источник является корневым каталогом папки, из которой вы копируете.

Конечным результатом будет любой файл .TIF в исходном каталоге, который будет скопирован в папку назначения с именами файлов Scan[$i].TIF, в которых число повторяется.по 1 на каждый скопированный файл.

...