PowerShell连接Get ChildItem的输出

PowerShell连接Get ChildItem的输出,powershell,string-formatting,Powershell,String Formatting,我有一个使用正则表达式搜索文件的工作脚本。该脚本为每个文件返回2行:父文件夹naùe和与正则表达式匹配的文件名 Get-ChildItem -Path "D:\test\" -Recurse -File | Where-Object { $_.BaseName -match '^[0-9]+$' } | ForEach-Object { $_.FullName -Split '\',-3,'SimpleMatch' } | select -last 2 |

我有一个使用正则表达式搜索文件的工作脚本。该脚本为每个文件返回2行:父文件夹naùe和与正则表达式匹配的文件名

Get-ChildItem -Path "D:\test\" -Recurse -File |
  Where-Object { $_.BaseName -match '^[0-9]+$' } |
    ForEach-Object { $_.FullName -Split '\',-3,'SimpleMatch' } | 
     select -last 2 | 
       Out-File "D:\wim.txt"
某个系统需要将输出放在一行上,并用\或类似字符连接。请问我怎样才能做到这一点

非常感谢

Get-ChildItem -Path D:\test -Recurse -File | 
  Where-Object { $_.BaseName -match '^[0-9]+$' } | 
    ForEach-Object { ($_.FullName -split '\\')[-2,-1] -join '\' } |                          #'
      Out-File D:\wim.txt
$\.FullName-Split'\\'[-2,-1]从文件路径中提取最后2个组件 and-join'\'将它们重新连接在一起。 请注意,除了行格式问题外,原始命令不能按预期工作,因为| select-last 2应用于整个输出,而不是每个匹配的文件;因此,即使有多个匹配文件,您也只能获得最后一个匹配文件的父目录和文件名

因此,上面的命令直接根据-split操作的结果提取ForEach对象块内最后两个分离的路径组件,以便每个文件返回两个连接的组件

另一方面,$\ FullName-split'\'中的-3、-3、'SimpleMatch'不提取最后3个令牌;它目前被有效地视为与0相同,这意味着返回所有生成的令牌;假定-split默认使用正则表达式,并且表示文字\需要转义为\、$\u.FullName-split'\',-3,'SimpleMatch'与$\u.FullName-split'\'相同,这就是上面的解决方案所使用的


注意,有一个将在将来赋予负的新含义,将当前正数逻辑类似地应用于输入字符串的末尾;e、 g,-3意味着:返回最后2个组件加上它们前面输入字符串的剩余部分,结果标记仍然从左到右报告。

将整个命令(out文件除外)括在括号中,附加一个-将“\”加入文件D:\wim.txt谢谢,明天我会测试,因为这里已经很晚了。我没想到会有这么快的回答-