我想首先找到存储在.ps1文件中的文件名(例如XXX.txt)(可以是任何东西,BBB只是一个例子),如果找到,请用在控制台中输入的值替换它。那么我将使用诸如test.txt而不是xxx.txt
的新版本进行更新$DName = read-host -prompt "Please Enter File Name"
(Get-Content "C:\run.ps1") |
Foreach-Object { $content = $_ -replace "$????","$DName" } |
Set-Content "C:\run.ps1"
run.ps1文件:
$line = ''
Get-Content C:\bulk\XXX.txt |
Select-String -Pattern 'TEMP' |
ForEach-Object {
#blah blah
}
答案 0 :(得分:1)
您可以使用
$_ -replace "(Get-Content\s+(['`"]?)C:\\bulk\\).*?(\.txt\2)", ('${1}' + $DName.replace('$','$$') + '$3')
请参见regex demo
详细信息
(Get-Content\s+(['`"]?)C:\\bulk\\)
-第1组:
Get-Content\s+
-Get-Content
,然后是1+空格(.*?)
-第2组:一个'
,"
或空字符串C:\\bulk\\
-C:\bulk\
子字符串.*?
-除换行符以外的0个或更多字符,并且尽可能少(\.txt\2)
-第2组:.txt
和第2组中捕获的文本。替换是串联的结果:
${1}
-第1组值(如果BBB
实际上可能以数字开头,则必须使用大括号)$DName.replace('$','$$')
-新文件名加了$
个字符的两倍(因为它们在.NET替换模式中是特殊的)$3
-第3组值。