PowerShell 连接 Get-ChildItem 的输出
PowerShell concatenate output of Get-ChildItem
我有一个可以使用正则表达式搜索文件的工作脚本。脚本 returns 每个文件 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
应用于总体输出,而不是每个匹配文件;因此,即使有多个个匹配文件,你也只会得到最后一个个匹配文件的父目录和文件名。
因此上面的命令直接在 -split
的结果上提取 ForEach-Object
块 中最后 2 个 \
分隔的路径组件 =] 操作,以便每个文件 returned 2 个(连接的)组件。
顺便说一句,$_.FullName -split '\', -3, 'SimpleMatch'
中的 -3
而不是 提取最后 3 个标记;它目前被有效地视为与 0
相同,这意味着 所有 生成的标记都是 returned;鉴于 -split
默认使用 regexes,并且表示文字 \
需要转义为 \
,$_.FullName -split '\', -3, 'SimpleMatch'
与 $_.FullName -split '\'
,这就是上面的解决方案所使用的。
注意后面有一个green-lit -split
enhancement that will give negative <Max-substrings>
values新的含义,将当前的正数逻辑类比于输入字符串的end;例如,-3
表示:return 最后 2 个组件加上它们之前输入字符串的剩余部分(生成的标记仍然从左到右报告)。
我有一个可以使用正则表达式搜索文件的工作脚本。脚本 returns 每个文件 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
应用于总体输出,而不是每个匹配文件;因此,即使有多个个匹配文件,你也只会得到最后一个个匹配文件的父目录和文件名。
因此上面的命令直接在 -split
的结果上提取 ForEach-Object
块 中最后 2 个 \
分隔的路径组件 =] 操作,以便每个文件 returned 2 个(连接的)组件。
顺便说一句,$_.FullName -split '\', -3, 'SimpleMatch'
中的 -3
而不是 提取最后 3 个标记;它目前被有效地视为与 0
相同,这意味着 所有 生成的标记都是 returned;鉴于 -split
默认使用 regexes,并且表示文字 \
需要转义为 \
,$_.FullName -split '\', -3, 'SimpleMatch'
与 $_.FullName -split '\'
,这就是上面的解决方案所使用的。
注意后面有一个green-lit -split
enhancement that will give negative <Max-substrings>
values新的含义,将当前的正数逻辑类比于输入字符串的end;例如,-3
表示:return 最后 2 个组件加上它们之前输入字符串的剩余部分(生成的标记仍然从左到右报告)。