我试图找到使用PowerShell从变量输出创建数组的最佳方法。
我有以下代码:
import os, shutil, sys
source = r"\\server\data"
dest = r"e:\dest"
for pth in os.listdir(source):
if "." not in pth:
newsource = source + "\\" + pth + "\\"
这给了我以下输出:
(c) 2016 - 2017 Use of this software is subject to license restrictions ::Microsoft Windows 7 ::Microsoft Windows 7::name1 ::Microsoft Windows 7::name2 ::Microsoft Windows 7::name3 ::Microsoft Windows 7::name4 ::Microsoft Windows 7::name5 ::Microsoft Windows 7::name6 ::Microsoft Windows 7::name7
我需要来自$ListNames = & "listNames.cmd" | Out-String
到name1
的所有内容。
我尝试使用分隔符name7
尝试将其转换为CSV,尝试创建:
以及其他一些无法获得我想要的结果的尝试但未成功
非常感谢任何帮助或指导!
答案 0 :(得分:0)
我可能会这样做:
Out-String
。您希望无论如何都要逐行处理输出,因此合并这些行只需要您稍后再次拆分它们。Where-Object
过滤器(find
或findstr
过滤器将输出限制为相关行。)::
处的每个剩余行,然后从每个结果数组中选择最后一个字段。& ".\listNames.cmd" | Where-Object {
$_ -like '::*::*'
} | ForEach-Object {
($_ -split '::')[-1]
}
另一个选项是正则表达式匹配,建议为@TheMadTechnician:
& ".\listNames.cmd" | Where-Object {
$_ -match '^::.+?::(.+)'
} | ForEach-Object {
$matches[1]
}