根据文件内容重命名文件夹中的所有txt文件
Rename all txt files in a folder based on file content
有人可以帮忙使用 PowerShell
重命名文件夹中的单个 txt
文件,每个文件都需要根据每个 txt
文件中的关键字重命名。
例如
c:\temp.txt
可能有一行像 Invoice#: 4422 所以它需要重命名为 4422.txt
c:\temp.txt
可能有一行像 Invoice#: 5454 所以它需要重命名为 5454.txt
等等..
我可以通过正则表达式获得发票编号
$filecontents -match "INVOICE\#: (\d+):"
*C:\temp* 文件夹包含大量具有不同发票编号的 txt
文件,PS 脚本需要重命名所有文件.
谢谢,
试试这个,如果可行,请移除 -WhatIf
开关 Rename-Item
:
$files = Get-ChildItem "c:\temp\*.txt"
$index = [collections.generic.list[string]]::new()
foreach($file in $files)
{
if((Get-Content $file -Raw) -match '(?<=Invoice#:\s)\d+')
{
$invoiceNumber = $matches[0]
if($index.contains($invoiceNumber))
{
Write-Warning "File with name $invoiceNumber.txt already exists. Skipping."
continue
}
"Renaming {0} to $invoiceNumber.txt" -f $file.Name
$file | Rename-Item -NewName $invoiceNumber.txt -WhatIf
$index.Add($invoiceNumber)
}
}
有人可以帮忙使用 PowerShell
重命名文件夹中的单个 txt
文件,每个文件都需要根据每个 txt
文件中的关键字重命名。
例如
c:\temp.txt
可能有一行像 Invoice#: 4422 所以它需要重命名为 4422.txt
c:\temp.txt
可能有一行像 Invoice#: 5454 所以它需要重命名为 5454.txt
等等..
我可以通过正则表达式获得发票编号
$filecontents -match "INVOICE\#: (\d+):"
*C:\temp* 文件夹包含大量具有不同发票编号的 txt
文件,PS 脚本需要重命名所有文件.
谢谢,
试试这个,如果可行,请移除 -WhatIf
开关 Rename-Item
:
$files = Get-ChildItem "c:\temp\*.txt"
$index = [collections.generic.list[string]]::new()
foreach($file in $files)
{
if((Get-Content $file -Raw) -match '(?<=Invoice#:\s)\d+')
{
$invoiceNumber = $matches[0]
if($index.contains($invoiceNumber))
{
Write-Warning "File with name $invoiceNumber.txt already exists. Skipping."
continue
}
"Renaming {0} to $invoiceNumber.txt" -f $file.Name
$file | Rename-Item -NewName $invoiceNumber.txt -WhatIf
$index.Add($invoiceNumber)
}
}