Powershell добавляет суффикс к именам файлов на основе префикса - PullRequest
0 голосов
/ 31 мая 2018

У меня есть каталог, который состоит из нескольких текстовых файлов с именем:

1Customer.txt
2Customer.txt
...
99Customer.txt

Я пытаюсь создать сценарий powershell, который переименует файлы в более логичный:

Customer1.txt
Customer2.txt
...
Customer99.txt

Префикс может быть любым от 1 до 3 цифр.

Поскольку я новичок в PowerShell, я действительно не знаю, как мне этого добиться.Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Я уверен, что есть более хороший способ сделать это с помощью регулярных выражений, но вот первое, что нужно сделать:

$prefix = "Customer"
Get-ChildItem C:\folder\*$prefix.txt  | Rename-Item -NewName {$prefix + ($_.Name -replace $prefix,'')}
0 голосов
/ 31 мая 2018
  • Самый прямой путь - это gci / ls / dir
  • , где совпадают только базовые имена, начиная с номера с RegEx и заканчивая
  • Rename-Item ипостроение нового имени из подсовпадений.

ls |? BaseName -match '^(\d+)([^0-9].*)$' |ren -new {"{0}{1}{2}" -f $matches[2],$matches[1],$_.extension}

Тот же код без псевдонимов

Get-ChildItem |Where-Obect {$_.BaseName -match '^(\d+)([^0-9].*)$'} |
    Rename-Item -NewName {"{0}{1}{2}" -f $matches[2],$matches[1],$_.extension}
0 голосов
/ 31 мая 2018

Вот один из способов сделать это:

Get-ChildItem .\Docs -File |
    ForEach-Object {
        if($_.Name -match "^(?<Number>\d+)(?<Type>\w+)\.\w+$")
        {
            Rename-Item -Path $_.FullName -NewName "$($matches.Type)$($matches.Number)$($_.Extension)"
        }
    }

Строка:

$_.Name -match "^(?<Number>\d+)(?<Type>\w+)\.\w+$")

берет имя файла (например, «23Suppliers.txt») и выполняет сопоставление с шаблономэто, вытаскивая числовую часть (23) и часть «type» («Поставщики»), называя их «Number» и «Type» соответственно.Они хранятся в PowerShell в его автоматической переменной $matches, которая используется при работе с регулярными выражениями.

Затем мы реконструируем новый файл, используя сведения из исходного файла, такие как расширение файла ($_.Extension) и соответствующий тип ($matches.Type) и номер ($matches.Number):

"$($matches.Type)$($matches.Number)$($_.Extension)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...