我想首先找到存储在.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
}
你可以用
$_ -replace "(Get-Content\s+(['`"]?)C:\\bulk\\).*?(\.txt\2)", ('${1}' + $DName.replace('$','$$') + '$3')
细节
(Get-Content\s+(['`"]?)C:\\bulk\\)
- 第1组:
Get-Content\s+
- Get-Content
然后1+空格
(.*?)
- 第2组:'
,"
或空字符串
C:\\bulk\\
- C:\bulk\
substring.*?
- 除了换行符之外的0个或更多个字符,尽可能少(\.txt\2)
- 第2组:.txt
和第2组中捕获的文本。替换是连接的结果:
${1}
- 第1组值(如果BBB
实际上可能以数字开头,那么大括号是必须的)$DName.replace('$','$$')
- 带有加倍$
字符的新文件名(因为这些在.NET替换模式中是特殊的)$3
- 第3组价值。