เรามีไดเร็กทอรีไฟล์ HTML มากกว่า 3,000 ไฟล์ที่กำลังย้ายไปยังไซต์ sharepoint และเราจำเป็นต้องขัดข้อมูลบางส่วน
สถานการณ์เฉพาะ:
- ประมาณ 1/3 ของไฟล์มีส่วนหัว XML
<?xml version="1.0" encoding="utf-8"?>
ที่ sharepoint ไม่ชอบ เราวางแผนที่จะลบบรรทัดส่วนหัวนั้นออก - ทุกไฟล์มีพารามิเตอร์จาวาสคริปต์สำหรับ "HOME" ซึ่งชี้ไปที่ลิงก์หน้าแรกที่เกี่ยวข้องอื่นสองลิงก์
foo1.htm
หรือfoo.htm
เราต้องการเปลี่ยนทั้งคู่เป็นลิงก์สัมบูรณ์ของhttp:\\sharepoint.site\home.aspx
- ทุกไฟล์ยังมีพารามิเตอร์ลิงก์จาวาสคริปต์ "แสดง" ซึ่งเราเพียงต้องการซ่อนโดยเปลี่ยนเป็น
''
นี่คือฟังก์ชั่นของฉันจนถึงตอนนี้:
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,"","","");', ''
ฉันไม่แน่ใจว่าจะรวมสิ่งเหล่านั้นเป็นคำสั่งเดียวได้อย่างไร ดังนั้นฉันจึงเปิดไฟล์ ทำการเปลี่ยนแปลง บันทึกและปิดไฟล์แทนการทำธุรกรรมเปิด-แก้ไข-บันทึก/ปิดแยกกันสามรายการ ฉันยังไม่แน่ใจด้วยว่าเครื่องหมายคำพูดและเครื่องหมายจุลภาคทั้งหมดจะเป็นวิธีที่ดีที่สุดในการหลีกอักขระเหล่านี้ หรือเครื่องหมายคำพูดเดี่ยวที่อยู่รอบสตริงทั้งหมดนั้นเพียงพอหรือไม่
การทำความเข้าใจว่า "ขอให้ regexes แยกวิเคราะห์ 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