Переименовать файл с powershell (структура с переменным именем файла) - PullRequest
0 голосов
/ 26 февраля 2019

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

Примеры файлов:

test file - 1234 - copy.docx
test file - 1234.pdf

Я выполнял следующую команду:

Get-ChildItem <location> -file | foreach {
Rename-Item -Path $_.FullName -NewName ($_.Name.Split("-")[0] + $_.Extension) }

Я хочу сохранить имя файла перед последним "-".Но если я запускаю свою команду, я всегда получаю имя файла перед первым «-».

Любой совет для лучшего подхода?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Самый простой подход:

Get-ChildItem <location> -File | Rename-Item -NewName {
    $index = $_.BaseName.LastIndexOf("-")
    if ($index -ge 0) {
        $_.BaseName.Substring(0, $index).Trim() + $_.Extension
    }
    else { $_.Name }
}

Замените регулярное выражение:

Get-ChildItem <location> -File |
  Rename-Item -NewName {($_.BaseName -replace '(.*)-.*', '$1').Trim() + $_.Extension}
0 голосов
/ 26 февраля 2019

Вы можете использовать RegEx для достижения желаемого результата:

Rename-Item -Path $_.FullName -NewName (($_.Name -replace '(.*)-.*?$','$1') + $_.Extension) }

(.*)-.*?$ выбирает все символы (жадные) до последнего - до конца строки.

...