Войти

Показать полную графическую версию : Найти файлы по маске и заменить в них строки


Страниц : 1 [2]

YuS_2
10-06-2018, 13:06
Командлеты и так уже перегружены всяческими параметрами (и, что самое печальное, многочисленными умолчаниями) по самое нехочу, причём картина, зачастую, складывается удручающая. »
Да что там удручающего? Параметры есть, иногда их много, но есть же справка, причем встроенная и с примерами...
Параметры есть в любом языке, но вот справка аналогичная к ним... где ещё есть такая же? Ну, я имею в виду wsh и cmd, для сравнения... а про функционал можно и не упоминать даже...
Кроме того, где есть ещё такая реализация конвейеров, причем с объектами вместе?

Я бы лично предпочёл какой-нибудь интерпретатор для .Net по аналогу с WSH на основе той же сладкой парочки VB/JS. »
Сколько людей, столько и мнений, как говорится :)
Если бы с WSH было бы всё так радужно, то никакой монад на свет и не появился бы...
Да и портянки кодов можно посравнивать при аналогичных задачах... powershell, явно выиграет.

pzh2393
07-06-2019, 12:05
Добрый день!
Хотел адаптировать привелденный здесь скрипт для своих нужд, но что-то не получается..
Нужно во всех файлах Description поменять номер версии находящийся в теге <targetVersion>14.4.0</targetVersion>
dir "D:\WINDOWS\" -rec -inc 'Description'|%{
(gc $_.fullname -enc utf8 -raw) -replace '(?<=\"<targetVersion>\"\s*\")14.4.0(?=\")','14.4.1'|`
set-content $_.fullname -enc utf8
}
При запуске пишет ошибку "не удается найти параметр, соответствующий имени параметра "raw".
Прошу помочь с исправлением скрипта!

Нашел еще такой пример, но тоже не работает..
$sSourceFolder = 'D:\WINDOWS'
$sSourceFileName = 'Description'

$sString4Found = '14.4.0'
$sString4Replace = '14.4.1'

if(Test-Path -Path $sSourceFolder -PathType Container) {
Get-ChildItem -Path $sSourceFolder -Filter $sSourceFileName -File -Recurse | ForEach-Object -Process {
$sContent = Get-Content -Path $_.FullName -Encoding Oem

if($sContent -icontains $sString4Found) {
Write-Host $_.FullName
$sContent.Replace($sString4Found, $sString4Replace) | Set-Content -Path $_.FullName -Encoding Oem
}
}
} else {
Write-Host "Can't find source folder $sSourceFolder." -ForegroundColor Red
}
На этот раз пишет, что "не удается найти параметр, соответствующий имени параметра "File".

YuS_2
07-06-2019, 13:03
При запуске пишет ошибку "не удается найти параметр, соответствующий имени параметра "raw". »
"не удается найти параметр, соответствующий имени параметра "File". »
Всё это следствие устаревшей версии powershell. Чтобы всё заработало, необходимо её обновить.

pzh2393
07-06-2019, 13:10
Чтобы всё заработало, необходимо её обновить. »
А обновить ее не обновляя саму виндовс возможно?

Iska
07-06-2019, 14:06
Возможно. У Вас какая версия ОС?

pzh2393
07-06-2019, 15:15
какая версия ОС? »
Windows 7 x86

pzh2393
07-06-2019, 16:14
Вроде установил более новую версию powershell (7.0.0-preview.1), при запуске теперь нет тех ошибок, но и замена все равно не происходит.

YuS_2
07-06-2019, 17:59
но и замена все равно не происходит »
так это естественно, т.к. шаблон регвыра совсем не соответствует этому:
<targetVersion>14.4.0</targetVersion> »
- здесь нет кавычек. А внутри файлов они присутствуют? Если нет, то:
dir 'D:\WINDOWS' -rec -inc 'Description' |%{
(gc $_.fullname -enc utf8 -raw) -replace '(?<=<targetVersion>\s*)14.4.0(?=\s*<)','14.4.1' |
set-content $_.fullname -enc utf8
}

pzh2393
07-06-2019, 18:38
YuS_2, благодарю, теперь работает.




© OSzone.net 2001-2012