我是使用PowerShell的新手,我想知道如何简单地填充几个类似文件名中包含的数字字符串,使每个文件名中的数字位数相同。
也就是说,我有一个包含这300个文件的文件夹:
dummy name 1.txt
到dummy name 300.txt
并且只想将其中少于3位数的文件重命名为3位数字,例如:
dummy name 001.txt
到dummy name 300.txt
答案 0 :(得分:2)
如果文件是按顺序生成的,并且您有name1.txt
,name2.txt
等
您想要name0001.txt
,name0002.txt
等
你可以做
$j=1;
foreach ($i in Get-ChildItem "./name?.txt" -Name) {
echo $i;
$new_name = "name000" + $j + ".txt";
Rename-Item -Path $i -NewName $new_name;
$j=$j+1;
}
...然后再做一次,首先将$j
更改为10
,将0
取下,依此类推。
好的,如果可以的话,首先可以解决产生文件的问题。
答案 1 :(得分:1)
我会这样:
$i=0;
$nameLike='dummy name'
[int]$currentid=0
#RENAME TO REMOVE THE SPACE IN THE MIDDLE
gci -File -Path "./" | where{ $_.name -like "$nameLike*"} | %{
#remove space in the middle
$newname = $_.Name.Split(' ')[0] + $_.Name.Split(' ')[1]
#convert the name into the padding you want (3)
[int]::TryParse($_.Name.Split(' ')[2].Split('.')[0],[ref]$CurrentId) | Out-Null
$newname = $newname + $CurrentId.ToString("000") + $_.Extension
Rename-Item -Path $_.FullName -NewName $newname
}
答案 2 :(得分:0)
@TessellatingHeckler在评论中给出了很好的答案:
gci | ren -n {[regex]::replace($_.name, '\d+', {"$args".PadLeft(3, '0')})}
答案 3 :(得分:-1)
试试这个:
Get-ChildItem "c:\temp\" -file -Filter "*.txt" | where basename -match ". \d{1,2}$" | %{
$res=$_.BaseName -split '(.)(\d{1,2})$'
$newnamme="{0}\{1} {2:D3}{3}" -f $_.Directory, $res[0], [int]$res[2], $_.Extension
Rename-Item $_.FullName $newnamme
}
答案 4 :(得分:-1)
试试这个:
1..300 | %{
$source = "dummy name $_.txt"
$target = ('dummy name {0:00#}.txt' -f $_)
rename-item $source -NewName $target
}
备注:强>
外环有点不合常规。大多数脚本编写者将其编码为类似java for循环。
单引号和双引号的选择是有意的。小心。
代码有点不合适,因为文件名的某些部分输入了两次。
假设所有300个文件都存在。如果没有,您将收到错误。