小编ted*_*ted的帖子

在PowerShell中将输出重定向到$ null,但确保变量保持设置

我有一些代码:

$foo = someFunction
Run Code Online (Sandbox Code Playgroud)

这会输出一条警告消息,我想将其重定向到$ null:

$foo = someFunction > $null
Run Code Online (Sandbox Code Playgroud)

问题在于,当我这样做时,在成功抑制警告消息的同时,它也会产生负面的副作用,即不使用函数的结果填充$ foo.

如何将警告重定向到$ null,但仍然保持$ foo填充?

另外,如何将标准输出和标准错误重定向到null?(在Linux中,它是2>&1.)

powershell

67
推荐指数
4
解决办法
11万
查看次数

Powershell在foreach循环中更新哈希表值?

我正在尝试遍历哈希表并将每个键的值设置为5,并且Powershell给出错误:

$myHash = @{}
$myHash["a"] = 1
$myHash["b"] = 2
$myHash["c"] = 3

foreach($key in $myHash.keys){
    $myHash[$key] = 5
}
Run Code Online (Sandbox Code Playgroud)

通过集合枚举时发生错误:

Collection was modified; enumeration operation may not execute..
At line:1 char:8
+ foreach <<<< ($key in $myHash.keys){
    + CategoryInfo          : InvalidOperation: (System.Collecti...tableEnumer
   ator:HashtableEnumerator) [], RuntimeException
    + FullyQualifiedErrorId : BadEnumeration
Run Code Online (Sandbox Code Playgroud)

给出了什么以及如何解决?

powershell

33
推荐指数
4
解决办法
6万
查看次数

PowerShell中的正则表达式匹配

做以下事情是否有优雅的单行程?

$myMatch = "^abc(.*)"
$foo -match $myMatch
$myVar = $matches[1]
Run Code Online (Sandbox Code Playgroud)

我对$myVar变量感兴趣...

regex powershell

21
推荐指数
2
解决办法
4万
查看次数

如何在PowerShell中对对象中的多个项目求和?

我有:

$report.gettype().name
Object[]

echo $report

Item                       Average
--                         -------
orange                     0.294117647058824
orange                    -0.901960784313726
orange                    -0.901960784313726
grape                      9.91335740072202
grape                      0
pear                       3.48736462093863
pear                      -0.0324909747292419
pear                      -0.0324909747292419
apple                     12.1261261261261
apple                     -0.0045045045045045
Run Code Online (Sandbox Code Playgroud)

我想创建一个变量$ total,(例如哈希表),其中包含每个项目的"Average"列的总和,例如,

echo $total

orange  -1.5097
grape    9.913
pear     3.423
apple   12.116
Run Code Online (Sandbox Code Playgroud)

现在我正在考虑循环浏览$报告,但这很难看,而且我正在寻找比下面的起点更优雅的东西(不完整):

$tmpPrev = ""
foreach($r in $report){
    $tmp = $r.item
    $subtotal = 0
    if($tmp <> $tmpPrev){
        $subtotal += $r.average
    }
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

powershell

21
推荐指数
3
解决办法
6万
查看次数

Powershell/Perl:将多个CSV文件合并为一个?

我有以下CSV文件,我想将它们合并为一个CSV

01.csv

apples,48,12,7
pear,17,16,2
orange,22,6,1
Run Code Online (Sandbox Code Playgroud)

02.csv

apples,51,8,6
grape,87,42,12
pear,22,3,7
Run Code Online (Sandbox Code Playgroud)

03.csv

apples,11,12,13
grape,81,5,8
pear,11,5,6
Run Code Online (Sandbox Code Playgroud)

04.csv

apples,14,12,8
orange,5,7,9
Run Code Online (Sandbox Code Playgroud)

期望的输出:

apples,48,12,7,51,8,6,11,12,13,14,12,8
grape,,,87,42,12,81,5,8,,,
pear,17,16,2,22,3,7,11,5,6,,,
orange,22,6,1,,,,,,5,7,9
Run Code Online (Sandbox Code Playgroud)

谁能提供如何实现这一目标的指导?最好使用Powershell,但如果更容易,可以使用Perl等替代品.

感谢Pantik,您的代码输出接近我想要的:

apples,48,12,7,51,8,6,11,12,13,14,12,8
grape,87,42,12,81,5,8
orange,22,6,1,5,7,9
pear,17,16,2,22,3,7,11,5,6
Run Code Online (Sandbox Code Playgroud)

不幸的是,当CSV条目中没有条目时,我需要"占位符"逗号,例如橙色,22,6,1 ,,,,,, 5,7,9而不是橙色,22,6,1, 5,7,9

更新:我想按文件名的顺序解析这些,例如:

$myFiles = @(gci *.csv) | sort Name
foreach ($file in $myFiles){
Run Code Online (Sandbox Code Playgroud)

关于泰德

powershell perl

6
推荐指数
1
解决办法
2640
查看次数

Powershell - 分批循环穿过物体3

我有一个包含7个项目的对象.

$obj.gettype().name
Object[]

$obj.length
7
Run Code Online (Sandbox Code Playgroud)

我想分批循环3.我不想使用模数函数,我实际上希望能够只用该批次中的3个项目创建一个新对象.伪代码:

$j=0
$k=1
for($i=0;$i<$obj.length;$i+=3){
    $j=$i+2
    $myTmpObj = $obj[$i-$j] # create tmpObj which contains items 1-3, then items 4-6, then 7 etc
    echo "Batch $k
    foreach($item in $myTmpObj){
        echo $item
    }
    $k++
 }

Batch 1
item 1
item 2
item 3

Batch 2
item 4
item 5
item 6

Batch 3
Item 7
Run Code Online (Sandbox Code Playgroud)

问候,特德

powershell

4
推荐指数
1
解决办法
1519
查看次数

标签 统计

powershell ×6

perl ×1

regex ×1