2

我是使用 PowerShell 的新手,我想知道如何简单地填充几个相似文件名中包含的数字字符串,以使每个文件名中的位数相同。

也就是说,我有一个包含这 300 个文件的文件夹:

dummy name 1.txt通过dummy name 300.txt

并且只想将其中少于 3 位数字的文件重命名为全部具有 3 位数字,例如:

dummy name 001.txt通过dummy name 300.txt

4

5 回答 5

3

@TessellatingHeckler 在评论中给出了很好的答案:

gci | ren -n {[regex]::replace($_.name, '\d+', {"$args".PadLeft(3, '0')})}
于 2020-12-12T20:58:51.023 回答
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起飞,等等数百个。 100

好吧,如果您可以先解决生成文件的问题,请暂时关闭。

于 2020-03-27T17:14:42.503 回答
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
}

详细信息在这里: https ://medium.com/@josegabrielortegac/powershell-renaming-files-with-powershell-e9012573647a?sk=502148e039058d84fe34608d77cd1aa2

于 2020-03-28T02:51:14.160 回答
0

尝试这个:

1..300 | %{
     $source = "dummy name $_.txt"
     $target = ('dummy name {0:00#}.txt' -f $_)
     rename-item  $source -NewName $target
     }

笔记:

  1. 外环有点不合常规。大多数脚本编写者将其编码为类似于 java for 循环。

  2. 单引号和双引号的选择是有意的。当心。

  3. 代码有点不雅,因为文件名的某些部分被输入了两次。

  4. 假设所有 300 个文件都存在。如果没有,你会得到错误。

于 2017-09-16T15:34:06.840 回答
-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
}
于 2017-09-16T06:43:49.437 回答