powershell - PowerShell 连接 Get-ChildItem 的输出
问题描述
我有一个使用正则表达式搜索文件的工作脚本。该脚本为每个文件返回 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 个组件- 并将
-join '\'
它们重新组合在一起。
请注意,除了行格式问题之外,您的原始命令无法按预期工作,因为| select -last 2
它应用于整体输出,而不是每个匹配文件;因此,即使有多个匹配文件,您也只会获得最后一个匹配文件的父目录和文件名。
因此,上面的命令直接在操作结果上提取块内\
最后 2 个分隔的路径组件,以便每个文件返回 2 个(连接的)组件。ForEach-Object
-split
顺便说一句,-3
in$_.FullName -split '\', -3, 'SimpleMatch'
不会提取最后 3 个标记;它目前被有效地视为与 相同,这意味着返回所有结果标记;鉴于默认使用正则表达式,并且表示文字需要转义为,与 相同,这就是上述解决方案所使用的。0
-split
\
\\
$_.FullName -split '\', -3, 'SimpleMatch'
$_.FullName -split '\\'
请注意,有一个绿灯-split
增强功能将在未来赋予负值<Max-substrings>
新的含义,将当前的正数逻辑类似地应用于输入字符串的末尾;例如,-3
将意味着:返回最后 2 个组件加上它们之前输入字符串的左侧(结果标记仍然从左到右报告)。
推荐阅读
- ios - 如何在不重复的情况下在部分中设置 UITableViewCell backgroundColor?
- matlab - 如何在MATLAB的for循环中定义一个特殊的矩阵函数?
- mongodb - $filter 如果属性不存在
- c++ - 将 lambda 的“-Werror=subobject-linkage”作为标头中的模板参数:拒绝这个的原因是什么?
- python-3.x - 如何将要测试的模块导入到测试模块中
- javascript - 通过链接在 Discord 附件中使用 PHP 生成的图像
- laravel - 在 api.php 和 web.php 中定义同名的路由
- node.js - Socket.io Letsencrypt 和 CORS 上的安全连接失败
- laravel - 无法使用 phpunit 运行测试套件
- sql - 将 SQL 自联接查询转换为 data.table 语法