Board logo

标题: [问题求助] PowerShell获取脚本所在文件夹下的某一级的符合特定要求的文件夹名称 [打印本页]

作者: 5i365    时间: 2022-1-21 10:06     标题: PowerShell获取脚本所在文件夹下的某一级的符合特定要求的文件夹名称

不知下面这个功能, 可否实现, 提前感谢!
描述如下:
脚本所在文件夹,  有A和B....等多个文件夹, 其内部的文件夹结构分别如下:
A
        AA1
                AAA1
                NO
                OK
        AA2
                AAA2
                NO
                OK
        NO
        OK
------------------------------
B
        BB1
                BBB1
                NO
                OK
        BB2
                BBB2
                NO
                OK
        NO
        OK
.....其它已省略
------------------------------
期待的效果:
脚本中有个级别变量$jb,  还有个要排除的文件夹数组变量$pc

1.如果我把变量分别设为$jb=1,  $pc=NO, OK【即:下探到第1级,排除每级下名为NO和OK的文件,下一级文本前有个tab占位】
则脚本执行后生成的info.txt内容如下:
A
        AA1
        AA2
B
        BB1
        BB2
.....其它已省略
-------------------------------------------------------------------------------------------------------------
2.如果我把变量分别设为$jb=2,  $pc=OK【即:下探到第2级,排除每级下名为OK的文件,下一级文本前有个tab占位】
则脚本执行后生成的info.txt内容如下:
A
        AA1
                AAA1
                NO
        AA2
                AAA2
                NO
        NO
B
        BB1
                BBB1
                NO
        BB2
                BBB2
                NO
        NO
.....其它已省略
作者: idwma    时间: 2022-1-24 15:01

  1. $jb=1
  2. $pc='NO', 'OK'
  3. (((dir -rec -name -exc $pc) -match "^[^\\]*(?:\\[^\\.]*){1,$jb}$")|sort{$_ -replace "^([^\\]{$jb})",'$1'})|%{foreach($i in ($_ -split '\\')){$a+$i;$a+="`t"};rv a}|select -unique
复制代码

作者: 5i365    时间: 2022-1-25 11:36

本帖最后由 5i365 于 2022-1-25 11:40 编辑

回复 2# idwma


    感谢帮忙, 刚试了一下,
$jb=2
$pc='NO'
显示信息如下, 没有显示B下没显示OK , BB2下的也没显示
示例:https://send.cm/d/8Anv


A
        AA1
                AA11
                AA12
                OK
        AA2
                AA21
                AA22
        OK
B
        BB1
                BB11
                BB12
        BB2
请按任意键继续. . .
作者: idwma    时间: 2022-1-25 15:07

本帖最后由 idwma 于 2022-1-25 15:10 编辑
  1. $jb=2
  2. $pc='NO', ''
  3. foreach($j in dir|?{$_.PSIsContainer}){$j.name;(((dir $j -rec -name -exc $($pc+'*.*')) -match "^[^\\]*(?:\\[^\\.]*){0,$($jb-1)}$")|sort)|%{foreach($i in ($_ -split '\\')){"`t"+$a+$i;$a+="`t"};rv a}|select -unique}
复制代码
回复 3# 5i365




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