返回列表 发帖
回复 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>COPY

TOP

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()COPY
我用(dir -dir).count -eq 0 来判断是否是底层文件夹,感觉很呆
想用test-path,用法上还有点疑问,还需要搜索学习...

TOP

本帖最后由 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 #####

TOP

回复 4# for_flr


    多谢指教, 已经成功输出:
gci 顶级 -dir -rec -name | sort | foreach{
1 .. $_.split("\").count + 1 | foreach{ $mark = "#" + $mark }
$mark + ' ' + $_.split("\")[-1] + ' ' + $mark
rv mark
} | tee -var sCOPY

TOP

回复 3# 5i365


    第四行,$mark变量表示若干个#

TOP

回复 2# for_flr


    感谢大侠帮忙, 第一行中的-r改成-rec后, 可以成功生成,  但是#号和文字相接的地方有个空格, 应该改哪里?
例如
##一级1##
应为
## 一级1 ##

TOP

"#顶级#"
dir -dir 顶级 -r -name|sort|%{
1..$_.split("\").count+1|%{$mark="#"+$mark}
$mark+$_.split("\")[-1]+$mark
rv mark
}COPY

TOP

返回列表