Regex - переименовать файл (переместить первое слово в конец строки, удалить все до третьего пробела) - PullRequest
0 голосов
/ 19 марта 2020

У меня есть несколько файлов с одним и тем же соглашением об именах:

NAME Invoice N ° 2020010001 01_01_2020.pdf

Обратите внимание, что «NAME» может быть короче или длиннее но всегда прикрепленный.

Я бы хотел, чтобы он стал:

2020010001 NAME.pdf

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

Моя идея состояла бы в том, чтобы сохранить 'NAME' во временной переменной, а затем удалить все в строке перед третьим пробелом, тогда я бы удалите все после первого пробела в результирующей строке, к которой я наконец добавлю 'NAME'.

Ответы [ 3 ]

2 голосов
/ 19 марта 2020

Привет, MDUB88 Я использовал функцию split от powershell. Это должно сделать работу:

$oldname = "NAME Invoice N° 2020010001 01_01_2020.pdf"
$tmp = $oldname.Split(" ")
$fileextension = $tmp[4].Split(".")[1]
$filename = "$($tmp[3]) $($tmp[0]).$fileextension"

Пожалуйста, проверьте это, дайте мне знать, если это сработало, и если это сработало, пожалуйста, пометьте мой пост как ответ:)

1 голос
/ 19 марта 2020

Для дальнейшего использования вот последний сценарий:

$directory = (Get-Item -Path ".\").FullName
Get-ChildItem -Path $directory -Recurse -File | Move-Item -Destination $directory
Get-ChildItem -Path $directory -Recurse -Directory | Remove-Item
foreach($file in get-childitem -Filter *.pdf -r) {
    $oldname = "$file"
    $tmp = $oldname.Split(" ")
    $fileextension = $tmp[4].Split(".")[1]
    $filename = "$($tmp[3]) $($tmp[0]).$fileextension"
    $finalfilename = $filename.Insert(6,'_')
    Rename-Item $file -newname $finalfilename
}

На самом деле он добавляет подчеркивание после 6-го символа окончательного имени, что не было частью исходного вопроса. Вот строка, которая делает это:

    $finalfilename = $filename.Insert(6,'_')
1 голос
/ 19 марта 2020

Как насчет использования -replace с группами регулярных выражений, примерно так:

'NAME Invoice N° 2020010001 01_01_2020.pdf' -replace '^(\w+) Inv.+ (\d+) (\d\d_\d\d_\d{4})(\.pdf)', '$3 $1$4'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...