标题: [问题求助] 如何使用PS生成Markdow或XML来表达CMD中tree命令所生成的结构 [打印本页]
作者: 5i365 时间: 2022-3-8 11:03 标题: 如何使用PS生成Markdow或XML来表达CMD中tree命令所生成的结构
本帖最后由 5i365 于 2022-3-12 12:25 编辑
我想把桌面上名为 顶级 的文件夹内的结构用 Markdow 文本的形式表示出来,
请求高手指点,有没有更简单的PS命令或方法可以实现, 提前感谢!
实际情况中,文件夹的深度可能达N级, 在ps中, dir 中有的 能控制深度级别的参数 -dep ,估计可能用得上, 用这个控制 Markdow文本中的#数量?
文件夹示例下载: https://send.cm/d/9HBz
CMD的Tree命令所显示的文件夹结构如下:
C:\Users\Administrator\Desktop>tree 顶级 /F
C:\USERS\ADMINISTRATOR\DESKTOP\顶级
├─一级1
│ ├─二级1
│ │ ├─三级1
│ │ │ ├─四级1
│ │ │ └─四级2
│ │ └─三级2
│ │ ├─四级1
│ │ └─四级2
│ └─二级2
│ ├─三级1
│ │ ├─四级1
│ │ └─四级2
│ └─三级2
│ ├─四级1
│ └─四级2
├─一级2
│ ├─二级1
│ │ ├─三级1
│ │ │ ├─四级1
│ │ │ └─四级2
│ │ └─三级2
│ │ ├─四级1
│ │ └─四级2
│ └─二级2
│ ├─三级1
│ │ ├─四级1
│ │ └─四级2
│ └─三级2
│ ├─四级1
│ └─四级2
└─一级3
├─二级1
│ ├─三级1
│ │ ├─四级1
│ │ └─四级2
│ └─三级2
│ ├─四级1
│ └─四级2
└─二级2
├─三级1
│ ├─四级1
│ └─四级2
└─三级2
├─四级1
└─四级2
--------------------------------------------------------------------------------
期待PS脚本能生成的 Markdow 文本如下: 里面的空行是示意的, 可以不要
# 顶级 #
## 一级1 ##
### 二级1 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
### 二级2 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
## 一级2 ##
### 二级1 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
### 二级2 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
## 一级3 ##
### 二级1 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
### 二级2 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
作者: for_flr 时间: 2022-3-8 22:31
- "#顶级#"
- dir -dir 顶级 -r -name|sort|%{
- 1..$_.split("\").count+1|%{$mark="#"+$mark}
- $mark+$_.split("\")[-1]+$mark
- rv mark
- }
复制代码
作者: 5i365 时间: 2022-3-8 23:04
回复 2# for_flr
感谢大侠帮忙, 第一行中的-r改成-rec后, 可以成功生成, 但是#号和文字相接的地方有个空格, 应该改哪里?
例如
##一级1##
应为
## 一级1 ##
作者: for_flr 时间: 2022-3-8 23:12
回复 3# 5i365
第四行,$mark变量表示若干个#
作者: 5i365 时间: 2022-3-8 23:19
回复 4# for_flr
多谢指教, 已经成功输出:- gci 顶级 -dir -rec -name | sort | foreach{
- 1 .. $_.split("\").count + 1 | foreach{ $mark = "#" + $mark }
- $mark + ' ' + $_.split("\")[-1] + ' ' + $mark
- rv mark
- } | tee -var s
复制代码
作者: 5i365 时间: 2022-3-8 23:47
本帖最后由 5i365 于 2022-3-8 23:49 编辑
回复 4# for_flr
大侠好, 又遇到一个难题, 这回感觉要复杂多了, 还是接着最上面的描述, 到文件夹的最底层之后, 如果存在文件, 则把文件名提出来, 例如现在文件夹的总结构变为如下:
注这里的底层是指最底层,没有文件夹了!
C:\USERS\ADMINISTRATOR\DESKTOP\文件夹结果生成MD\顶级
├─一级1
│ ├─二级1
│ │ ├─三级1
│ │ │ ├─四级1
│ │ │ │ 四级文件1.txt
│ │ │ │ 四级文件2.txt
│ │ │ │
│ │ │ └─四级2
│ │ │ 四级文件1.txt
│ │ │ 四级文件2.txt
│ │ │ 四级文件3.txt
│ │ │
│ │ └─三级2
│ │ ├─四级1
│ │ └─四级2
│ └─二级2
│ ├─三级1
│ │ ├─四级1
│ │ └─四级2
│ └─三级2
│ ├─四级1
│ └─四级2
├─一级2
│ ├─二级1
│ │ ├─三级1
│ │ │ ├─四级1
│ │ │ └─四级2
│ │ └─三级2
│ │ ├─四级1
│ │ └─四级2
│ └─二级2
│ ├─三级1
│ │ ├─四级1
│ │ └─四级2
│ └─三级2
│ ├─四级1
│ └─四级2
└─一级3
├─二级1
│ ├─三级1
│ │ ├─四级1
│ │ └─四级2
│ └─三级2
│ ├─四级1
│ └─四级2
└─二级2
├─三级1
│ ├─四级1
│ └─四级2
└─三级2
├─四级1
└─四级2
----------------------------------------------------------
则需要生成的MD文件内容如下:
规律是:
如果最底层文件夹里只有一个文件,则在该文件夹级别名下面添加文件名,然后加一个空行
如果最底层文件夹里只有多个文件,则在该文件夹级别名下面分别添加每个文件名,每个文件名后加一个空行
就像下面红色字部分: 四级1下有两个文件, 四级2下有三个文件
----------------------------------------------------------
# 顶级 #
## 一级1 ##
### 二级1 ###
#### 三级1 ####
##### 四级1 #####
四级文件1
四级文件2
##### 四级2 #####
四级文件1
四级文件2
四级文件3
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
### 二级2 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
## 一级2 ##
### 二级1 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
### 二级2 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
## 一级3 ##
### 二级1 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
### 二级2 ###
#### 三级1 ####
##### 四级1 #####
##### 四级2 #####
#### 三级2 ####
##### 四级1 #####
##### 四级2 #####
作者: for_flr 时间: 2022-3-9 10:52
- dir 顶级 -dir -rec -name | sort | %{
- 1 .. $_.split("\").count + 1 | foreach{ $mark = "#" + $mark }
- $mark + ' ' + $_.split("\")[-1] + ' ' + $mark
- rv mark
- $fullpath="顶级\"+$_
- if ((dir -dir $fullpath).count -eq 0){
- foreach($i in (dir $fullpath -file)){$i.basename+"`r`n"}
- }
- } | tee -var s
- [console]::readkey()
复制代码
我用(dir -dir).count -eq 0 来判断是否是底层文件夹,感觉很呆
想用test-path,用法上还有点疑问,还需要搜索学习...
作者: 5i365 时间: 2022-3-9 12:42
回复 7# for_flr
多谢大侠帮忙, 可以执行成功! 但是Markdow 最多只能支持6级标题, 再多就不显示了, 所以最后一级识别和显示没有意义了
现在看来,只能用复杂的XML格式来搞了, XML相比MD的显示代码, 就是标签是一对,前后两个, 感觉实现难度又提高了
大侠能帮试试, 生成下面的XML代码吗? 只显示文件夹层次就可以了, 最底层的文件识别不需要了,
提前感谢!- <?xml version="1.0" encoding="UTF-8"?>
- <opml version="1.0"
- xmlns:sx="http://www.microsoft.com/schemas/rss/sse">
- <head>
- <title>顶级</title>
- </head>
- <body>
- <outline text="一级1">
- <outline text="二级1">
- <outline text="三级1">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- </outline>
- <outline text="二级2">
- <outline text="三级1">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- </outline>
- </outline>
- <outline text="一级2">
- <outline text="二级1">
- <outline text="三级1">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- </outline>
- <outline text="二级2">
- <outline text="三级1">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- </outline>
- </outline>
- <outline text="一级3">
- <outline text="二级1">
- <outline text="三级1">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- </outline>
- <outline text="二级2">
- <outline text="三级1">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1">
- </outline>
- <outline text="四级2">
- </outline>
- </outline>
- </outline>
- </outline>
- </body>
- </opml>
复制代码
作者: for_flr 时间: 2022-3-9 15:20
密密麻麻的尖括号,看得头皮发麻,坐等大佬的代码吧。
我想借楼问一下,为什么你的ps代码总是整整齐齐,大小写分明,是用什么格式化工具吗
作者: 5i365 时间: 2022-3-9 15:42
回复 9# for_flr
用了一款powershell studio软件格式化了一下,
作者: 5i365 时间: 2022-3-9 16:46
回复 9# for_flr
上面的xml的标签是分在两行上的, 如果并成一行, 要整齐,规律的多, 下面并了一下最后那层标签- <?xml version="1.0" encoding="UTF-8"?>
- <opml version="1.0"
- xmlns:sx="http://www.microsoft.com/schemas/rss/sse">
- <head>
- <title>顶级</title>
- </head>
- <body>
- <outline text="一级1">
- <outline text="二级1">
- <outline text="三级1">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- </outline>
- <outline text="二级2">
- <outline text="三级1">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- </outline>
- </outline>
- <outline text="一级2">
- <outline text="二级1">
- <outline text="三级1">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- </outline>
- <outline text="二级2">
- <outline text="三级1">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- </outline>
- </outline>
- <outline text="一级3">
- <outline text="二级1">
- <outline text="三级1">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- </outline>
- <outline text="二级2">
- <outline text="三级1">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- <outline text="三级2">
- <outline text="四级1"></outline>
- <outline text="四级2"></outline>
- </outline>
- </outline>
- </outline>
- </body>
- </opml>
复制代码
作者: 5i365 时间: 2022-3-11 18:30
本帖最后由 5i365 于 2022-3-11 18:40 编辑
回复 9# for_flr
找了一篇代码, 感觉有戏
水平有限, 但是感觉看明白了下面代码, 10行代码就能搞定!
组件下载: 64位系统要下载64位的组件
https://www.chilkatsoft.com/downloads_DotNet.asp
64位直接下载
https://chilkatdownload.com/9.5. ... net48-9.5.0-x64.zip
32位直接下载
https://chilkatdownload.com/9.5. ... t48-9.5.0-win32.zip
演示如何使用标记路径创建XML文档。- Add-Type -Path "C:\chilkat\ChilkatDotNet47-9.5.0-x64\ChilkatDotNet47.dll"
-
- $xml = New-Object Chilkat.Xml
-
- $xml.Tag = "world"
-
- # This example uses features introduced in v9.5.0.64
- $xml.NewChild2("north_america|united_states|california|sacremento","capital")
- $xml.NewChild2("north_america|united_states|california|los_angeles","City of Angels")
- $xml.NewChild2("north_america|united_states|california|san_francisco","Silicon Valley")
- $xml.NewChild2("north_america|united_states|california|san_diego","Birthplace of California")
- $xml.NewChild2("north_america|united_states|illinois|chicago","Windy City")
-
- $($xml.GetXml())
-
- # Produces the following XML
- #
- # <?xml version="1.0" encoding="utf-8" ?>
- # <world>
- # <north_america>
- # <united_states>
- # <california>
- # <sacremento>capital</sacremento>
- # <los_angeles>City of Angels</los_angeles>
- # <san_francisco>Silicon Valley</san_francisco>
- # <san_diego>Birthplace of California</san_diego>
- # </california>
- # <illinois>
- # <chicago>Windy City</chicago>
- # </illinois>
- # </united_states>
- # </north_america>
- # </world>
- #
复制代码
作者: went 时间: 2022-3-11 19:24
使用递归- cls
-
- function Build-DirXml([System.IO.DirectoryInfo]$dir,$depth){
- #当前文件夹开始
- $str = ''
- for($i = 0; $i -lt $depth; $i++) { $str += "`t" }
- $str += '<outline text="{0}">' -f $dir.Name
- #递归子文件夹
- $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" } }
- $str += '<outline/>' + "`r`n"
- #递归结束
- return $str
- }
-
- Build-DirXml -dir (Get-Item '顶级') -depth 0
复制代码
作者: 5i365 时间: 2022-3-11 19:37
回复 13# went
感谢大侠支招, 我的这个是不规则的XML吗? 他的前面是这样的, 还是有相应的属性可以设置?
<head>
<title>顶级</title>
</head>
<body>
<outline text="一级1">
作者: went 时间: 2022-3-11 19:42
回复 14# 5i365
啥意思,加上head,title,body?
作者: 5i365 时间: 2022-3-11 20:10
回复 15# went
我也说不明白, 您看一下 上面 11楼 的XML前面部分, 第一到第七行
作者: went 时间: 2022-3-11 20:21
回复 16# 5i365
那就生成和上面一模一样的xml- cls
-
- 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" }
- $str += '<outline text="{0}">' -f $dir.Name
- $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 '0.xml'
复制代码
作者: 5i365 时间: 2022-3-11 22:33
本帖最后由 5i365 于 2022-3-12 12:23 编辑
回复 17# went
大侠太牛X了, 生成的文件和原文件一模一样! 貌似没有用到XML节点之类的函数,
想问一下, 从11楼的XML代码, 反向生成文件夹可以实现吗? 感觉这个反向操作应该要使用XML节点来操作了!
已开新贴 http://www.bathome.net/viewthrea ... mp;extra=#pid252574
作者: 5i365 时间: 2022-3-13 07:40
本帖最后由 5i365 于 2022-3-13 09:07 编辑
回复 17# went
大侠好, 我想在除 顶级 文件夹外的所有文件夹的标签里添加上文件夹的相对路径, 可以在上面代码的基础上简单修改实现吗? 具体描述如下, 再次感谢
示例文件夹结构:
C:\USERS\ADMINISTRATOR\DESKTOP\顶级
└─一级1
└─二级1
└─三级1
├─四级1
│ ├─五级1
│ │ └─六级1
│ └─五级2
└─四级2
_____________________________________________________________________________________________________________________________________
1.最底层的标签变化:
如果文件夹里没有子文件夹了, 以前的标签是一对, 现在变为 只要左标签, 后面加 /
例如下面的: 四级2 五级2 六级1 的标签
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
<head>
<title>顶级</title>
</head>
<body>
<outline text="顶级">
<outline text="一级1">
<outline text="二级1">
<outline text="三级1">
<outline text="四级1">
<outline text="五级1">
<outline text="六级1"/>
</outline>
<outline text="五级2"/>
</outline>
<outline text="四级2"/>
</outline>
</outline>
</outline>
</outline>
</body>
</opml>
_____________________________________________________________________________________________________________________________________
2.在标签内添加注释文本和路径:
A.添加注释文本:【能否在代码前加个switch开关,设1时: 按下面情况添加; 设2时: 任何情况下都添加,但是添加的内容只有一个空字; 设3时, 功能关闭,不添加】
除顶级之外的其它所有级别的文件夹下, 如果存在txt文件【没有就不添加了】, 则获取里面的内容, 回车符替换为 , 引号"替换为 " 如果有多个txt文件则先把它们拼接在一起
例如为一级1文件夹添加的注释文本, 【文本用""括起来,文本前边添加note=】
note="我是 顶级\一级1 文件夹下的txt文件中的内容 我是第二段"
B. 添加路径:【能否在代码前加个开关,开的时候就加,关的时候就不加了】
除顶级之外的其它所有级别的文件夹标签内, 添加上它所在的位置的路径
例如下面为 一级1 文件夹添加的路径, 即:红色字部分为该文件夹相对顶级文件夹的位置, 【路径前面加上 type="link" url="file:,后面加"】
type="link" url="file:顶级/一级1"
_____________________________________________________________________________________________________________________________________
供测试的示例文件夹 https://send.cm/d/9PET
期待的最终效果:
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
<head>
<title>顶级</title>
</head>
<body>
<outline text="顶级">
<outline text="一级1" note="我是 顶级\一级1 文件夹下的txt文件中的内容 我是第二段" type="link" url="file:顶级/一级1">
<outline text="二级1" note="我是 顶级\一级1\二级1 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1">
<outline text="三级1" note="我是 顶级\一级1\二级1\三级1 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1/三级1">
<outline text="四级1" note="我是 顶级\一级1\二级1\三级1\四级1 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1/三级1/四级1">
<outline text="五级1" note="我是 顶级\一级1\二级1\三级1\四级1\五级1 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1/三级1/四级1/五级1">
<outline text="六级1" note="我是 顶级\一级1\二级1\三级1\四级1\五级1\六级1 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1/三级1/四级1/五级1/六级1"/>
</outline>
<outline text="五级2" note="我是 顶级\一级1\二级1\三级1\四级1\五级2 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1/三级1/四级1/五级2"/>
</outline>
<outline text="四级2" note="我是 顶级\一级1\二级1\三级1\四级2 文件夹下的txt文件中的内容" type="link" url="file:顶级/一级1/二级1/三级1/四级2"/>
</outline>
</outline>
</outline>
</outline>
</body>
</opml>
_____________________________________________________________________________________________________________________________________
作者: 5i365 时间: 2022-3-14 15:33
本帖最后由 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
复制代码
作者: 5i365 时间: 2022-3-14 22:14
回复 18# 5i365
上面的问题1 在输出前,用下面的方式搞定了, 感觉应该还有更简单的方法, 现在,只有问题2 没有搞定, 那个圈子转不过弯来
$d = Get-Item '顶级'
(Build-DirXml -dir $d -depth 0).replace($d,"顶级") | Out-File 'OK.opml' -enc utf8
作者: 5i365 时间: 2022-3-15 06:49
回复 17# went
第二个问题也搞定了, 所有的问题, 全部搞定了!
将第10行按成下面的两行代码
$str += '<outline text="{0}">' -f $dir.Name
$end_str = '</outline>' + "`r`n" + '</body>' + "`r`n" + '</opml>'
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |