переименовать числа в файлах - PullRequest
0 голосов
/ 19 июня 2019

Я хочу переименовать только .csv файлы, которые не соответствуют рекомендациям по формату имен. Все остальные файлы с неправильными номерами в порядке.

правильно:

     31_12_99-01.csv
     01_01_00-88.csv

неправильно:

     2_1_00-01.csv

Мне нужна помощь для определения чисел меньше 10 (только одна цифра).

Get-ChildItem *.csv -Name |Where{$_.Name -match '\d+'} 

После переименования powershell должен показать все переименованные файлы (новое имя файла), чтобы я мог сохранить этот список в rename.cfg.

1 Ответ

0 голосов
/ 19 июня 2019
get-childitem *.csv |
where name -match '(\b|_)\d_' |
rename-item -newname { $_.name -replace '(\b)(\d_)','${1}0$2' -replace '(_)(\d_)','${1}0$2' } -whatif -passthru

What if: Performing the operation "Rename File" on target "Item: C:\Users\js\foo\2_1_00-01.csv Destination: C:\Users\js\foo\02_01_00-01.csv".

# why doesn't this work?  I guess because the patterns overlap
# rename-item -newname { $_.name -replace '(\b|_)(\d_)','${1}0$2' } -whatif -passthru

РЕДАКТИРОВАТЬ: С отрицательным взглядом назад и отрицательным взглядом, сладкий. регулярное выражение: найти однозначное число

get-childitem *.csv |
where name -match '(?<!\d)\d(?!\d)' |
rename-item -newname { $_.name -replace '(?<!\d)(\d)(?!\d)','0$1' } -whatif -passthru
...