【问题标题】:Replacing string but duplicate part of string替换字符串但重复部分字符串
【发布时间】:2016-09-22 17:47:51
【问题描述】:

我有几个批处理文件需要修改。
循环浏览文件并替换工作正常。

我只是想不通如何拥有像

这样的单行
net use w: \\someserver\someshare  

换成两行

net use w: /delete /yes  
net use w: \\someotherserver\someshare 

这完全可以用替换和正则表达式来实现吗?
还是我必须将驱动器号存储在变量中才能完成此操作?

谢谢,

【问题讨论】:

    标签: string powershell replace


    【解决方案1】:

    是的,-replace 可以做到这一点:

    $yourFilePath = 'PATH_TO_YOUR_FILE'
    $content = Get-Content $yourFilePath
    $content -replace '^net use (\w): .*', "net use `$1: /delete /yes `n`$0" | Set-Content $yourFilePath
    

    脚本将所需的行添加到您的文件并使用特定的驱动器,但不检查行 (net use drive: /delete /yes) 是否已存在。

    【讨论】:

    • 谢谢,效果很好 :) 只需要添加 r before the n 即可将其换行。想解释一下驱动器号是如何变成 1 美元的吗?
    • 它是因为 (\w) 在括号中,因此在 $1 中捕获(因为它是第一个捕获组。$0 是整个正则表达式匹配
    • 我会捕获包括冒号在内的所有内容,因为它在两个命令中都是一样的:-replace '^(net use \w:) .*', "`$1 /delete /yes`n`$0"
    • @AnsgarWiechers 没错,我错过了。你赢得了正则表达式高尔夫 (regex.alf.nu) ;-)
    猜你喜欢
    • 2012-07-17
    • 2015-12-07
    • 1970-01-01
    • 2021-07-09
    • 2011-10-10
    • 1970-01-01
    • 2013-06-19
    • 2021-03-25
    相关资源
    最近更新 更多