标题: [问题求助] [已解决]PowerShell如何获取所有路径行中的公共部分? [打印本页]
作者: 5i365 时间: 2023-1-21 11:01 标题: [已解决]PowerShell如何获取所有路径行中的公共部分?
本帖最后由 5i365 于 2023-1-25 19:07 编辑
有没有一种简单的方法可以获取一个多行字符串中, 所有路径的公共部分?
在下面的示例中,我希望输出为
C:\Users\Administrator\Desktop\Test0\DEF\
C:\Users\Administrator\Desktop\Test0\DEF\A
C:\Users\Administrator\Desktop\Test0\DEF\B
C:\Users\Administrator\Desktop\Test0\DEF\1.txt
C:\Users\Administrator\Desktop\Test0\DEF\2.txt
作者: idwma 时间: 2023-1-24 21:43
试试split-path
作者: 5i365 时间: 2023-1-25 13:37
本帖最后由 5i365 于 2023-1-25 14:39 编辑
回复 2# idwma
多谢大侠指引, 下面的代码, 实际上有两个公共的路径, 分别如下: 但是如何只输出这两行呢?
C:\Users\Administrator\hello\
C:\Users\Administrator\Desktop\Test0\DEF\
这个逻辑有点难以描述
- $s = @'
- C:\Users\Administrator\hello\A
- C:\Users\Administrator\hello\B
- C:\Users\Administrator\hello\B\1.txt
- C:\Users\Administrator\Desktop\Test0\DEF\A
- C:\Users\Administrator\Desktop\Test0\DEF\B
- C:\Users\Administrator\Desktop\Test0\DEF\1.txt
- C:\Users\Administrator\Desktop\Test0\DEF\2.txt
- '@
-
- $s -split "\r?\n" |
- foreach {
- Split-Path $_
- }
复制代码
作者: 5i365 时间: 2023-1-25 14:34
本帖最后由 5i365 于 2023-1-25 14:39 编辑
回复 2# idwma
下面这样写, 还是有个多余的项存在, 而且公共路径后应该有个\
- $s = @'
- C:\Users\Administrator\hello\A
- C:\Users\Administrator\hello\B
- C:\Users\Administrator\hello\B\1.txt
- C:\Users\Administrator\Desktop\Test0\DEF\A
- C:\Users\Administrator\Desktop\Test0\DEF\B
- C:\Users\Administrator\Desktop\Test0\DEF\1.txt
- C:\Users\Administrator\Desktop\Test0\DEF\2.txt
- '@
-
- $s -split "\r?\n" |
- foreach {
- Split-Path $_
- } | sort-object | Get-Unique
复制代码
作者: idwma 时间: 2023-1-25 16:07
- $s=$s -split "\r?\n"
- for($i=0;$i -lt $s.length;$i++){
- if(!(gv a 2>$null)){$a=split-path $s[$i]}
- if($s[$i+1] -notmatch [regex]::Escape($a)){$a+'\';rv a}
- }
复制代码
作者: 5i365 时间: 2023-1-25 17:41
回复 5# idwma
多谢大侠帮忙, 结果是正确的, 但是水平有限, 代码实在看不懂
作者: 5i365 时间: 2023-1-25 17:46
本帖最后由 5i365 于 2023-1-25 17:50 编辑
回复 5# idwma
下面的代码执行的结果是错误的
应该输出:
C:\Users\Administrator\hello
C:\Users\Administrator\Desktop\Test0\DEF\
感觉适应各种情况有点难
- $s = @'
- C:\Users\Administrator\hello
- C:\Users\Administrator\hello\B
- C:\Users\Administrator\hello\C\a.bat
- C:\Users\Administrator\hello\B\1.txt
- C:\Users\Administrator\Desktop\Test0\DEF\A
- C:\Users\Administrator\Desktop\Test0\DEF\B
- C:\Users\Administrator\Desktop\Test0\DEF\1.txt
- C:\Users\Administrator\Desktop\Test0\DEF\2.txt
- '@
- $s = $s -split "\r?\n"
- for ($i = 0; $i -lt $s.length; $i++)
- {
- if (!(gv a 2>$null)) { $a = split-path $s[$i] }
- if ($s[$i + 1] -notmatch [regex]::Escape($a)) { $a + '\'; rv a }
- }
复制代码
作者: idwma 时间: 2023-1-25 18:26
- $s=$s -split "\r?\n"
- for($i=0;$i -lt $s.length;$i++){
- if(!(gv a 2>$null)){
- for($j=0;$j -lt $s[$i+1].length;$j++){
- if(($s[$i][0..$j] -join '') -ne ($s[$i+1][0..$j] -join '')){$a=$s[$i][0..($j-1)] -join '';break}
- }
- }
- if($s[$i+1] -notmatch [regex]::Escape($a)){$a;rv a}
- }
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |