У нас есть каталог из более чем 3000 HTML-файлов, которые переносятся на сайт sharepoint, и нам нужно очистить некоторые данные.
Конкретные ситуации:
- Примерно 1/3 файлов содержат XML-заголовок
<?xml version="1.0" encoding="utf-8"?>
, который не нравится sharepoint. Мы планируем просто удалить эту строку заголовка. - В каждом файле есть параметры javascript для «HOME», которые указывают на две альтернативные относительные ссылки на домашнюю страницу
foo1.htm
илиfoo.htm
. Мы хотим изменить оба на абсолютную ссылкуhttp:\\sharepoint.site\home.aspx
- Каждый файл также имеет параметр ссылки javascript «Показать», который мы просто хотим скрыть, изменив его на
''
.
Вот моя функция до сих пор:
function scrubXMLHeader {
$srcfiles = Get-ChildItem $backupGuidePath -filter "*htm.*"
$srcfilecount = (Get-ChildItem $backupGuidePath).Count
$selfilecount = $srcfiles.Count
# Input and Ouput Path variables
$sourcePath = $backupGuidePath
$destinationPath = $workScrubPath
"Input From: $($sourcePath)" | Log $messagLog -echo
" Output To: $($destinationPath)" | Log $messageLog -echo
#
$temp01 = Get-ChildItem $sourcePath -filter "*.htm"
foreach($file in $temp01)
{
$outfile = $destinationPath + $file
$content = Get-Content $file.Fullname | ? {$_ -notmatch "<\?xml[^>]+>" }
Set-Content -path $outfile -Force -Value $content
}
}
Я хочу добавить следующие два редактирования в каждый документ:
-replace '("foo.htm", "", ">", "Home", "foo1.htm")', '("http:\\sharepoint.site\home.aspx", "", ">", "Home", "http:\\sharepoint.site\home.aspx")
-replace 'addButton("show",BTN_TEXT,"Show","","","","",0,0,"","","");', ''
Я не уверен, как объединить их в один оператор, поэтому я открываю файл, вношу изменения, сохраняю и закрываю файл вместо трех отдельных транзакций открытия-редактирования-сохранения/закрытия. Я также не уверен, что со всеми кавычками и запятыми лучший способ избежать этих символов или достаточно ли одинарных кавычек, окружающих всю строку.
Понимание того, что «запрашивать регулярные выражения для анализа произвольного HTML, например, попросить Пэрис Хилтон написать операционную систему, иногда уместно проанализировать ограниченный, известный набор HTML", но, поскольку мой набор инструментов ограничен PowerShell, я пытаюсь понять, как лучше всего добавить два -replace
строк в существующую переменную $content
... разделенные запятыми в фигурных скобках? перекликались друг с другом?
Является ли следующая лучшая стратегия? или есть что-то лучше?
$content = Get-Content $file.Fullname | ? {$_ -notmatch "<\?xml[^>]+>",
-replace '("foo.htm", "", ">", "Home", "foo1.htm")', '("http:\\sharepoint.site\home.aspx", "", ">", "Home", "http:\\sharepoint.site\home.aspx"),
-replace 'addButton("show",BTN_TEXT,"Show","","","","",0,0,"","","");', '' }
Tidy
является необязательным для предварительного уточнения кода. Остальное встроено в Windows/PowerShell. - person Ansgar Wiechers   schedule 20.12.2013