Перестановка частей даты в имени файла с помощью powershell - PullRequest
0 голосов
/ 03 мая 2020

Я хочу переименовать

backup_01_03_2020__.log

в

backup_2020_01_03__.log

Я пробовал читать о powershell, но не нашел ничего полезного, поскольку у меня нет хороших знаний о powershell.

Любые предложения или хорошая ссылка на какой-либо материал высоко ценится

Ответы [ 3 ]

1 голос
/ 03 мая 2020

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

$files = Get-ChildItem -Path C:\path\to\logs\* -Include *.log
foreach ($file in $files) {
    if ($file.Name -match 'backup_(\d{2})_(\d{2})_(\d{4})__\.log') {
        Rename-Item -Path $file -NewName "backup_$($Matches[3])_$($Matches[1])_$($Matches[2])__.log"
    } else {
        Write-Host "'$($file.Name)' does not match the pattern!"
    }
}
0 голосов
/ 03 мая 2020

Вот подход без регулярных выражений. Есть ли действительно два _ перед .log?

echo hi > backup_01_03_2020__.log

dir *_*_*_*__.log | rename-item -newname { 
  ($_.name -split '_')[0,3,1,2,4,5] -join '_' } -whatif

What if: Performing the operation "Rename File" on target "Item:
/Users/js/foo/backup_01_03_2020__.log Destination: 
/Users/js/foo/backup_2020_01_03__.log".
0 голосов
/ 03 мая 2020

Использование -Filter позволяет предварительно фильтровать файлы для выборки по простому шаблону. Затем перенаправьте оставшиеся результаты в предложение Where-Object, чтобы можно было использовать оператор regex -match.

Все совпадающие файлы, которые можно переименовать с помощью scriptblick как параметр -NewName, например:

# you might want to add switch '-Recurse' if you have logs to rename in subfolders
Get-ChildItem -Path 'X:\Logs' -Filter 'backup_*.log' -File |   
    Where-Object { $_.BaseName -match '^backup_(\d{2})_(\d{2})_(\d{4})' } |
    Rename-Item -NewName { 'backup_{0}_{1}_{2}__.log' -f $Matches[3], $Matches[1], $Matches[2] } -WhatIf

Снимите переключатель -WhatIf, если на выходе консоли отображаются правильные имена новых файлов

Результат:

X:\Logs\backup_01_03_2020__.log  -->  X:\Logs\backup_2020_01_03__.log
X:\Logs\backup_01_07_2020__.log  -->  X:\Logs\backup_2020_01_07__.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...