Powershell根据前缀为文件名添加后缀

时间:2018-05-31 09:45:09

标签: powershell

我有一个目录,其中包含许多已命名的文本文件:

1Customer.txt
2Customer.txt
...
99Customer.txt

我正在尝试创建powershell脚本,将文件重命名为更合理的文件:

Customer1.txt
Customer2.txt
...
Customer99.txt

前缀可以是1位到3位之间的任何内容。

由于我是PowerShell的新手,我真的不知道如何实现这一目标。任何帮助非常感谢。

3 个答案:

答案 0 :(得分:3)

我确定使用正则表达式有更好的方法来做到这一点,但以下是快速的第一步:

mysql:
image: mysql:5.7
volumes:
 - ./my_directory_with_init_scripts:/docker-entrypoint-initdb.d
 - ./mysql:/var/lib/mysql
environment:
 - MYSQL_ROOT_PASSWORD=1347891743
 - MYSQL_DATABASE=database

答案 1 :(得分:3)

  • 最直接的方式是gci / ls / dir
  • ,其中只匹配以带有a的数字开头的BaseNames RegEx和管道到
  • 重命名项目并从子匹配中构建新名称。
ls |? BaseName -match '^(\d+)([^0-9].*)$' |ren -new {"{0}{1}{2}" -f $matches[2],$matches[1],$_.extension}

没有别名的相同代码

Get-ChildItem |Where-Obect {$_.BaseName -match '^(\d+)([^0-9].*)$'} |
    Rename-Item -NewName {"{0}{1}{2}" -f $matches[2],$matches[1],$_.extension}

答案 2 :(得分:2)

这是一种方法:

Get-ChildItem .\Docs -File |
    ForEach-Object {
        if($_.Name -match "^(?<Number>\d+)(?<Type>\w+)\.\w+$")
        {
            Rename-Item -Path $_.FullName -NewName "$($matches.Type)$($matches.Number)$($_.Extension)"
        }
    }

该行:

$_.Name -match "^(?<Number>\d+)(?<Type>\w+)\.\w+$")

获取文件名(例如&#39; 23Suppliers.txt&#39;)并对其执行模式匹配,拉出数字部分(23)和&#39;类型&#39;部分(&#39;供应商&#39;),命名他们&#39;数字&#39;和&#39;键入&#39;分别。它们由PowerShell存储在自动变量$matches中,在使用正则表达式时使用它。

然后,我们使用原始文件中的详细信息重新构建新文件,例如文件的扩展名($_.Extension)和匹配的类型($matches.Type)和数字({{1} }):

$matches.Number