逃避前进的斜线问题

时间:2016-08-24 14:11:32

标签: powershell

在下面的半伪代码中,数组$system中第一个元素的正斜杠始终被读作反斜杠。

我尝试过各种各样的转义字符,例如`和\但无济于事。这是PowerShell中的已知问题吗?怎么解决?

$system = @("Something/Anything", "Super Development","Quality Assurance")

//the following is looped with $y
$string| ConvertTo-json | FT | Out-File -append C:\Test\Results\$($system[$y])_All.csv

//error:
Message        : Could not find a part of the path 'C:\Test\Results\Something\Anything_All.csv'

1 个答案:

答案 0 :(得分:2)

正如您在问题的评论中提到的@autosvet,有几个reserved characters无法在Windows上的文件名/路径中使用,即:

  
      
  • 使用当前代码页中的任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:

         

    以下保留字符:

         
        
    • <(小于)
    •   
    • >(大于)
    •   
    • :(冒号)
    •   
    • "(双引号)
    •   
    • /(正斜杠)
    •   
    • \(反斜杠)
    •   
    • |(垂直条或竖线)
    •   
    • ?(问号)
    •   
    • *(星号)
    •   
  •   

这些字符无法转义,只能被替换。您可以使用GetInvalidFileNameChars()方法以编程方式确定需要替换的字符:

$invalid = [regex]::Escape([IO.Path]::GetInvalidFileNameChars())
$string | ConvertTo-json | FT |
  Out-File -Append C:\Test\Results\$($something[$y] -replace $invalid, '_')_All.csv