[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 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
.....其它已省略

  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
复制代码

TOP

本帖最后由 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
请按任意键继续. . .

TOP

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

评分人数

    • 5i365: 牛X, 乐于助人技术 + 1

TOP

返回列表