我有一个目录,其中包含许多已命名的文本文件:
1Customer.txt
2Customer.txt
...
99Customer.txt
我正在尝试创建powershell脚本,将文件重命名为更合理的文件:
Customer1.txt
Customer2.txt
...
Customer99.txt
前缀可以是1位到3位之间的任何内容。
由于我是PowerShell的新手,我真的不知道如何实现这一目标。任何帮助非常感谢。
答案 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)
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