在Powershell中基于文件的第一行重命名文本文件错误



我试图根据第一行重命名大量纯文本文件。我遇到的问题是,一些第一行有无效字符(路径中的非法字符),所以我得到错误。这就是我使用的:

$files = Get-ChildItem *.txt
$file_map = @()
foreach ($file in $files) {
$file_map += @{
OldName = $file.Fullname
NewName = "{0}.txt" -f $(Get-Content $file.Fullname| select -First 1)
}
}
$file_map | % { Rename-Item -Path $_.OldName -NewName $_.NewName }

重命名时是否有办法忽略特殊字符?

谢谢。

以下内容可能适合您。本质上,您可以使用Path.GetInvalidFileNameChars方法获取文件名的无效字符的字符数组,然后创建一个regex模式来删除这些无效字符:

$invalidChars = ([IO.Path]::GetInvalidFileNameChars() |
ForEach-Object { [regex]::Escape($_) }) -join '|'
Get-ChildItem *.txt | Rename-Item -NewName {
$firstLine = ($_ | Get-Content -TotalCount 1) -replace $invalidChars
'{0}.txt' -f $firstLine
}

也许更简单的方法是删除任何非单词字符W:

Get-ChildItem *.txt | Rename-Item -NewName {
$firstLine = ($_ | Get-Content -TotalCount 1) -replace 'W'
'{0}.txt' -f $firstLine
}

或删除不在a-z,A-Z,0-9字符范围内的任何字符或空格:

Get-ChildItem *.txt | Rename-Item -NewName {
$firstLine = ($_ | Get-Content -TotalCount 1) -replace '[^a-z0-9 ]'
'{0}.txt' -f $firstLine
}

相关内容

  • 没有找到相关文章

最新更新