本帖最后由 5i365 于 2022-3-14 21:57 编辑
回复 17# went
自己尝试搞了一下, 有两个问题实在搞不定: 期待路过的高手指点一下迷津, 非常感谢!
第 17 18 19 行
1 $url 变量值: 取到了整个路径, 还要删除 顶级 之前的路径
2 如何让body标签下面第一层也从 顶级 开始,即变成下面这样, 现在红字部分是 一级1
<opml version="1.0">
<head>
<title>顶级</title>
</head>
<body>
<outline text="顶级">- #@&cls&powershell "gc '%~0'|out-string|iex"&pause&exit
- function Build-DirXml([System.IO.DirectoryInfo]$dir, $depth)
- {
- #当前文件夹开始
- if ($depth -eq 0)
- {
- $str = '<?xml version="1.0" encoding="UTF-8"?>' + "`r`n"
- $str += '<opml version="1.0" xmlns:sx="http://www.microsoft.com/schemas/rss/sse">' + "`r`n`t"
- $str += '<head>' + "`r`n`t`t" + ('<title>{0}</title>' -f $dir.Name) + "`r`n`t" + '</head>' + "`r`n`t" + "<body>"
- $end_str = '</body>' + "`r`n" + '</opml>'
- ++$depth
- }
- else
- {
- $str = ''; $end_str = ''
- for ($i = 0; $i -lt $depth; $i++) { $str += "`t" }
- $url = $dir.fullname
- $note = (gci "$url\*.txt" | ForEach { gc -enc UTF8 $_; "" }) -join ' ' -replace '"', '"'
- $str += '<outline text="{0}" note="{1}" type="link" url="file:{2}">' -f $dir, $note, $url
- $end_str = '</outline>' + "`r`n"
- }
- #递归子文件夹
- $dirs = $dir.GetDirectories()
- $depth_tmp = $depth
- if ($dirs.Count -gt 0)
- {
- $sub_str = "`r`n"; ++$depth_tmp
- $dirs | foreach { $sub_str += Build-DirXml -dir $_ -depth $depth_tmp }
- }
- else { $sub_str = '' }
- #当前文件夹结束
- $str += $sub_str
- if ($dirs.Count -gt 0) { for ($i = 0; $i -lt $depth; $i++) { $str += "`t" } }
- #递归结束
- return $str + $end_str
- }
-
- Build-DirXml -dir (Get-Item '顶级') -depth 0 | Out-File 'ok.opml' -enc utf8
复制代码
|