Board logo

标题: [问题求助] 获取主文件夹下所有子文件夹的路径列表遇到的排序问题 [打印本页]

作者: 5i365    时间: 2022-1-2 10:58     标题: 获取主文件夹下所有子文件夹的路径列表遇到的排序问题

本帖最后由 5i365 于 2022-1-2 11:12 编辑

桌面上有一个A文件夹,里面有如下的子文件夹,并且是按如下的顺序显示的:
1 中
2 国
11 美
12 国
22 人
101 日
102 本
202 人

执行下面的代码
Get-ChildItem -Path "C:\Users\Administrator\Desktop\A" -Name -Directory
得到的结果如下,
1 中
101 日
102 本
11 美
12 国
2 国
202 人
22 人

问题:
1.如何让结果以最上面的文件夹顺序排列?
2.如何在结果中显示子文件夹的完整路径而不只是文件夹名,我用下面的代码,没有任何显示
Get-ChildItem -Path "C:\Users\Administrator\Desktop\A" -Directory -Name | foreach {echo $_.FullName}

作者: 5i365    时间: 2022-1-2 11:22

找到一篇文章,但是看不太懂:
https://www.itranslater.com/qa/details/2583269405165618176
作者: 5i365    时间: 2022-1-2 11:26

本帖最后由 5i365 于 2022-1-2 11:56 编辑

瞎猫碰死耗子, 自己搞定了, 期待路过的高手, 能解释一下中间那部分的代码, 也期待能有更简单的代码

Get-ChildItem "C:\Users\Administrator\Desktop\A" -Directory | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args[0].Value.PadLeft(20) }) } | ForEach-Object {echo $_.fullname}
作者: went    时间: 2022-1-2 18:28

  1. Get-ChildItem -Directory -Name | Sort-Object { [int]($_ -split '\s+')[0] }
复制代码

作者: 5i365    时间: 2022-1-2 19:11

本帖最后由 5i365 于 2022-1-2 19:14 编辑

回复 4# went


    大侠威武, 牛X, 但是不知道稳不稳, 能应付得了文件名中有空格和特殊符号的情况吗?  

对正则一直都不敢太放手去用, 以前有一次尝试, 结果执行后, 遇到不可逆的误操作了, 所以一直把正则放在最后的方案来用
作者: 5i365    时间: 2022-1-2 19:17

回复 4# went


    还有一个问题, 执行后没显示完整路径, 我加了代码也不灵
Get-ChildItem "C:\Users\Administrator\Desktop\A" -Directory -Name | Sort-Object { [int]($_ -split '\s+')[0] } | ForEach-Object { echo $_.fullname }
作者: went    时间: 2022-1-2 19:25

回复 6# 5i365


    适用于这种名称 "数字 xxx xxx"
  1. Get-ChildItem -Directory | Sort-Object { [int]($_.Name -split '\s+')[0] } | Select-Object { $_.FullName }
复制代码

作者: 5i365    时间: 2022-1-3 06:24

回复 7# went


    输出的结果, 多一个标题头

$_.FullName
-------------
C:\Users\Administrator\Desktop\A\1 中
C:\Users\Administrator\Desktop\A\2 国
C:\Users\Administrator\Desktop\A\11 美
C:\Users\Administrator\Desktop\A\12 国
C:\Users\Administrator\Desktop\A\22 人
C:\Users\Administrator\Desktop\A\101 日
C:\Users\Administrator\Desktop\A\102 本
C:\Users\Administrator\Desktop\A\202 人
作者: 5i365    时间: 2022-1-3 06:29

回复 7# went


    把后面改成 ForEach-Object { $_.fullname } 就可以了, 不知道select 和foreach为什么会有不同
作者: 5i365    时间: 2022-3-7 16:09

回复 7# went


    大侠好, 当文件夹名中,数字后面没有空格时,还能用切分的方法吗? 或还有简单点的方法吗? 例如

1中
101日
102本
11美
12国
2国
202人
22人
作者: for_flr    时间: 2022-3-7 19:53

  1. dir -dir |sort{[int][regex]::matches($_.name,'\d+').value}
复制代码
试试这个
作者: 5i365    时间: 2022-3-7 20:41

回复 11# for_flr


    多谢分享, 比上面我搜索到的那个代码, 短了不少, 这回应该稳了吧, 文件不多的时候, 很少用批处理, 怕不稳, 有时真不可逆
作者: 5i365    时间: 2022-3-7 20:47

本帖最后由 5i365 于 2022-3-7 20:49 编辑

回复 11# for_flr


    突然想请教一个个问题, 怎样获得打开的文件夹后, 里面显示的文件默认排序的列表? 也就是, 默认情况下,右键菜单中 -> 排序方式 ->是选了 名称  和 递增

例如,打开文件夹后, 显示的文件的顺序如下:

12 国.txt
第 2 国.txt
第1 中.txt
第11 美.txt

但是用了上面代码后, 排序却如下, 这个问题有解吗?

第1 中.txt
第 2 国.txt
第11 美.txt
12 国.txt




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2