如何使用PowerShell替换其字符串中包含反斜杠(\)的文件内容?

时间:2018-05-03 15:38:12

标签: xml powershell powershell-v2.0 powershell-v3.0 powershell-v4.0

我有一个包含多个占位符的配置文件,我希望使用PowerShell替换其他一些值,但是下面的代码无法用%WebClientPath%\www变量中包含的值替换$WebClientPath。它有这个路径“ C:\ IWeb \ Demo \ Main \ UIPresentation \ WebApp ” 其中%VirtualApplicationName% IMWeb

取代

我尝试从%WebClientPath%删除 \ www ,但它确实有效,但我希望 \ www 也可以替换。我认为这是因为反斜杠(\)

[CmdletBinding()]
Param
(   
    [string]$PathofWebConfigFile="C:\Automate\Web.config"  ,
    [string]$VirtualApplicationName="IMWeb"  
)


# Code to get WebClient Path from PhysicalPath attribute.
$WebClientPath=(get-webapplication IMWeb).PhysicalPath


(Get-Content -Path "$PathofWebConfigFile") | ForEach-Object {$_ -Replace "%VirtualApplicationName%","$VirtualApplicationName"} | Set-Content -Path "$PathofWebConfigFile"
(Get-Content -Path "$PathofWebConfigFile") | ForEach-Object {$_ -Replace "%WebClientPath%\www","$WebClientPath"} | Set-Content -Path "$PathofWebConfigFile"

3 个答案:

答案 0 :(得分:2)


斜杠NOFALLOC := $(shell echo "\#include <fcntl.h>\nint main() { posix_fallocate(0,0,0);}" | $(CC) -o /dev/null -Werror -xc - >/dev/null 2>/dev/null && echo 0 || echo 1) ifeq "$(NOFALLOC)" "1" DFLAGS += -DNO_POSIX_FALLOCATE endif 通过双斜杠\进行转义,请尝试以下操作:

\\

此cmdlet会将"mypath\www" -replace "\\www","\zzz" 替换为\www

答案 1 :(得分:0)

只是为了快速概述如何在字符串

中使用正则表达式的转义序列字符
$currenttext = "\www.google.com" 
echo "$currenttext"
$currenttext2 = [Regex]::Escape($currenttext)
echo "escaped : $currenttext2"

$newtext = "www.yahoo.com"

$currenttext2 = $currenttext2.replace($currenttext2, $newtext)
echo "$currenttext2"

答案 2 :(得分:0)

-replace运算符基于RegEx,因此您要么

  • 逃避单个字符,它们是RegEX或
  • 的指令
  • 如果事先知道变量内容,请更好地使用[Regex]::Escape()

您可以使用String.Replace方法,该方法不是基于RegEx的方法:

$_.Replace("%WebClientPath%\www","$WebClientPath")