PowerShell连接Get ChildItem的输出
我有一个使用正则表达式搜索文件的工作脚本。该脚本为每个文件返回2行:父文件夹naùe和与正则表达式匹配的文件名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 |
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谢谢,明天我会测试,因为这里已经很晚了。我没想到会有这么快的回答-