更有效的方法是从多个文件中逐个提取行,然后在powershell中从中合成新文件
我正在尝试从5个文件中生成视频站点地图,其中我有不同部分的站点地图信息。我想到的唯一方法是在每个文件的循环中跳过一行,然后将下一行添加到目标文件中,但这需要很长时间才能在10分钟内完成,因为每个文件中有超过3k行。每个文件中的所有行都彼此对齐,因此必须根据行号将它们分组在一起 以下是我使用的代码:更有效的方法是从多个文件中逐个提取行,然后在powershell中从中合成新文件,powershell,Powershell,我正在尝试从5个文件中生成视频站点地图,其中我有不同部分的站点地图信息。我想到的唯一方法是在每个文件的循环中跳过一行,然后将下一行添加到目标文件中,但这需要很长时间才能在10分钟内完成,因为每个文件中有超过3k行。每个文件中的所有行都彼此对齐,因此必须根据行号将它们分组在一起 以下是我使用的代码: # Count Number Of Lines $NumberOfVideos = 0 Get-Content "c:/list_of_links_with_YT_video.txt" |%{ $Nu
# Count Number Of Lines
$NumberOfVideos = 0
Get-Content "c:/list_of_links_with_YT_video.txt" |%{ $NumberOfVideos++ }
# Add lines to the sitemap 1 by 1
For($i=1;$i -le $NumberOfVideos;$i++){
' <url>' | Add-Content $outputfolder\videositemap.xml
Get-Content "c:/list_of_links_with_YT_video.txt" | select -first 1 -skip $i | Add-Content $outputfolder\videositemap.xml
" <video:video>" | Add-Content $outputfolder\videositemap.xml
Get-Content "c:/listof_YT_Embeds.txt" | select -first 1 -skip $i | Add-Content $outputfolder\videositemap.xml
Get-Content "c:/listof_YT_Thumbnailss.txt" | select -first 1 -skip $i | Add-Content $outputfolder\videositemap.xml
Get-Content "c:/list_of_video_sitemap_titles.txt" | select -first 1 -skip $i | Add-Content $outputfolder\videositemap.xml
Get-Content "c:/list_of_video_sitemap_descriptions.txt" | select -first 1 -skip $i | Add-Content $outputfolder\videositemap.xml
' </video:video>
</url>' | Add-Content $outputfolder\videositemap.xml
}
# Add last line to the sitemap
"</urlset>" | Add-Content $outputfolder\videositemap.xml
这是1次循环后站点地图文件中的内容示例:
<url>
<loc>http://mywebsite.com/page-example.html</loc>
<video:video>
<video:player_loc allow_embed="yes" autoplay="autoplay=1">http://www.youtube.com/v/xu3Je-eJgbR</video:player_loc>
<video:thumbnail_loc>http://img.youtube.com/vi/xu3Je-eJgbR/1.jpg</video:thumbnail_loc>
<video:title>Example Title Extracted From a HTML File</video:title>
<video:description>Example Description Extracted From A HTML File</video:description>
</video:video>
</url>
有没有更好的方法从多个文件中组合出一个文件
输入文件的内容永远不会更改,因此每个文件使用一次“获取内容”
Get Content返回具有Count属性的集合
输出文件从不更改,请将其存储在变量中
与$Path\$filename不同,Join Path是一种很好的做法
我不习惯添加内容,所以我使用了File-Append,但我想这只是口味的问题
这将产生您想要的:
$file1Lines = Get-Content "c:/list_of_links_with_YT_video.txt"
$file2lines = Get-Content "c:/listof_YT_Embeds.txt"
$file3lines = Get-Content "c:/listof_YT_Thumbnailss.txt"
$file4lines = Get-Content "c:/list_of_video_sitemap_titles.txt"
$file5lines = Get-Content "c:/list_of_video_sitemap_descriptions.txt"
$videoCount = ($file1Lines).Count
$outputFile = Join-Path $outputfolder "videositemap.xml"
#thought this was missing
"<urlset>" | Out-File $outputFile -Append
for($i = 1; $i -le $videoCount; $i++) {
#no indentation here to avoid indentation in the output string
" <url>
$($file1Lines[$i])
<video:video>
$($file2Lines[$i])
$($file3Lines[$i])
$($file4Lines[$i])
$($file5Lines[$i])
</video:video>
</url>" | Out-File $outputFile -Append
}
"</urlset>" | Out-File $outputFile -Append
我很想看到速度的提高
编辑:在你的源文件中有双引号,我希望这不会破坏我的脚本:哇,你是我的好朋友!您的代码大约需要4秒钟才能完成!谢谢!