字符串中的反斜杠不替换原始斜杠

时间:2019-04-03 18:17:34

标签: powershell replace slash

当我通过get-childitem获取目录内容时,斜线的方向错误,无法进行html验证。我正在尝试通过替换字符来解决此问题,但是由于某些原因,每次我尝试打印斜杠时,方向都不正确。这是我目前的尝试:

$filenameOut = "out.html"

#get current working dir
$cwd = Get-ScriptDirectory #(Get-Location).path #PSScriptRoot #(Get-Item -Path ".").FullName
$filenamePathOut = Join-Path $cwd $filenameOut

$InitialAppointmentGenArr = Get-ChildItem -Path $temp 

foreach($file in $InitialAppointmentGenArr)
{
   $fileWithoutExtension = [io.path]::GetFileNameWithoutExtension($file)
   #$file = $file -replace "\\", "/" #this didn't work
   $file | % {
      $_.FullName.ToString() | % {$_ -replace '\\','/'} #Replace("\\","/")
      $temp = '<li><a href="' +  $_.FullName +  '" target="_app">' + $fileWithoutExtension + '</a></li>'
      Add-Content -Path $filenamePathOut -Value $temp
   }
}

当我查看输出文件时,它没有显示反斜杠。

我看了here,也看了split path,但看时并没有在输出文件中显示结果。有想法吗?

我看到从斜线正确的地方写入屏幕的输出。我以为也许如果我使用$ _直接输出到文件而不更改原始数组,它将解决此问题。但这也不起作用。我仍然在输出文件中看到原始斜杠。

2 个答案:

答案 0 :(得分:1)

我将其重写为更简单的代码并删除不必要的循环:

$filenameOut = "out.html"

#get current working dir
$cwd = Get-ScriptDirectory #(Get-Location).path #PSScriptRoot #(Get-Item -Path ".").FullName
$filenamePathOut = Join-Path $cwd $filenameOut

$InitialAppointmentGenArr = Get-ChildItem -Path $temp 

foreach($file in $InitialAppointmentGenArr)
{
   $fileWithoutExtension = [io.path]::GetFileNameWithoutExtension($file)
   $temp = '<li><a href="' +  ($file.FullName -replace "\\",'/') +  '" target="_app">' + $fileWithoutExtension + '</a></li>'
   Add-Content -Path $filenamePathOut -Value $temp
   }
}

答案 1 :(得分:-1)

好吧,让我们从您尝试做的事情开始,以及为什么它不起作用。如果查看其中任何文件($file|get-member)的文件对象,就会看到FullName属性只有一个get方法,没有set方法,因此您无法更改该属性。因此,在不重命名源文件并再次获取文件信息的情况下,您永远都不会更改该属性。

知道,如果要捕获带有替换斜杠的路径,则需要在变量中捕获替换的输出。然后,您可以使用它来构建您的字符串。

$filenameOut = "out.html"

#get current working dir
$cwd = Get-ScriptDirectory #(Get-Location).path #PSScriptRoot #(Get-Item -Path ".").FullName
$filenamePathOut = Join-Path $cwd $filenameOut

$InitialAppointmentGenArr = Get-ChildItem -Path $temp 

foreach($file in $InitialAppointmentGenArr)
{
   $filePath = $file.FullName -replace "\\", "/"
   '<li><a href="' +  $filePath +  '" target="_app">' + $file.BaseName + '</a></li>' | Add-Content -Path $filenamePathOut}
}