PowerShell - вставьте несколько символов в начале, если строка содержит строку - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть несколько сотен командных файлов, таких как:

net use s: \\ukexchange\sysshare 
net use t: \\ukccohelp\helpdesk
net use w: \\ukexchange\public
net use l: \\dwarf\apps
net use y: \\ukexchange\sysgrp
net use k: \\dwarf\sql

Я хочу поставить REM перед каждой строкой, содержащей строку, например. "Ukexchange"

REM net use s: \\ukexchange\sysshare 
net use t: \\ukccohelp\helpdesk
REM net use w: \\ukexchange\public
net use l: \\reddwarf\apps
REM net use y: \\ukexchange\sysgrp
net use k: \\dwarf\sql

Это то, что у меня есть, но я должен выполнить эту команду вручную для каждой комбинации пути UNC и буквы диска.

$old = "net use l: \\dwarf\apps"
$new = "REM net use l: \\dwarf\apps"

get-childitem "c:\TEMP\Scripts" -recurse -include *.bat | 
select -expand fullname |
 foreach {
        (Get-Content $_) -replace ("$old" -replace '\\','\\'), "$new" |
         Set-Content $_
        }

Как мне поместить текст в начало строки, если где-то в строке содержится конкретная строка?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете использовать регулярное выражение для проверки наличия ukexchange.

$files = get-childitem "c:\TEMP\Scripts" -recurse -include *.bat | select -expand fullname

foreach ($f in $files) {
   $c = Get-Content $f | % { $_ -replace '(.*ukexchange.*)', 'REM $1' }
   $c | Set-Content $f
}

Если встречается строка, вся строка сохраняется в переменной группы совпадений $1, вы можете просто добавить REM к этому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...