重命名文件中的数字

时间:2019-06-19 10:42:25

标签: powershell formatting numbers batch-rename

我只想重命名不符合名称格式准则的.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 :(得分:0)

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

编辑:后向为负数,前向为负数,甜美。 regex: find one-digit number

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