gpt4 book ai didi

powershell - 如何在尝试保存文件名之前去除非法字符?

转载 作者:行者123 更新时间:2023-12-03 12:02:26 25 4
gpt4 key购买 nike

我找到了如何使用 GetInvalidFileNameChars() PowerShell 脚本中的方法。但是,它似乎也过滤掉了空格(这是我不想要的)。

编辑:也许我问得不够清楚。我希望下面的函数包含文件名中已经存在的空格。目前,脚本会过滤掉空格。

Function Remove-InvalidFileNameChars {

param([Parameter(Mandatory=$true,
Position=0,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[String]$Name
)

return [RegEx]::Replace($Name, "[{0}]" -f ([RegEx]::Escape([String][System.IO.Path]::GetInvalidFileNameChars())), '')}

最佳答案

将字符数组转换为 System.String实际上似乎用空格连接数组元素,这意味着

[string][System.IO.Path]::GetInvalidFileNameChars()


[System.IO.Path]::GetInvalidFileNameChars() -join ' '

当你真正想要
[System.IO.Path]::GetInvalidFileNameChars() -join ''

@mjolinor提到 (+1),这是由 output field separator 引起的( $OFS )。

证据:
PS C:\> [RegEx]::Escape([string][IO.Path]::GetInvalidFileNameChars())"\ \ \|\  \ ☺\ ☻\ ♥\ ♦\ ♣\ ♠\ \\ \t\ \n\ ♂\ \f\ \r\ ♫\ ☼\ ►\ ◄\ ↕\ ‼\ ¶\ §\ ▬\ ↨\ ↑\ ↓\ →\ ←\ ∟\ ↔\ ▲\ ▼\ :\ \*\ \?\ \\\ /PS C:\> [RegEx]::Escape(([IO.Path]::GetInvalidFileNameChars() -join ' '))"\ \ \|\  \ ☺\ ☻\ ♥\ ♦\ ♣\ ♠\ \\ \t\ \n\ ♂\ \f\ \r\ ♫\ ☼\ ►\ ◄\ ↕\ ‼\ ¶\ §\ ▬\ ↨\ ↑\ ↓\ →\ ←\ ∟\ ↔\ ▲\ ▼\ :\ \*\ \?\ \\\ /PS C:\> [RegEx]::Escape(([IO.Path]::GetInvalidFileNameChars() -join ''))"\| ☺☻♥♦\t\n♂\f\r♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼:\*\?\\/PS C:\> $OFS=''PS C:\> [RegEx]::Escape([string][IO.Path]::GetInvalidFileNameChars())"\| ☺☻♥♦\t\n♂\f\r♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼:\*\?\\/

Change your function to something like this:

Function Remove-InvalidFileNameChars {
param(
[Parameter(Mandatory=$true,
Position=0,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[String]$Name
)

$invalidChars = [IO.Path]::GetInvalidFileNameChars() -join ''
$re = "[{0}]" -f [RegEx]::Escape($invalidChars)
return ($Name -replace $re)
}

它应该做你想做的。

关于powershell - 如何在尝试保存文件名之前去除非法字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com