在PowerShell中的Replace Operator中使用Format Operator

时间:2018-12-30 10:46:37

标签: powershell windows-10 powershell-v5.1

我正在尝试将文件"Introduction _ C# _ Tutorial 1"重命名为"01.Introduction"之类的东西。它需要一个-replace运算符和一个-f运算符才能对索引号进行零填充。我的代码就像:

$string = "Introduction _ C# _ Tutorial 1"
if ($string -match "^([^_]+)_[^\d]+(\d{1,2})$") {
    $Matches[0] -replace "^([^_]+) _[^\d]+(\d{1,2})$", ("{0:d2}. {1}" -f '$2', '$1')
    }

但是,输出类似于-f运算符的缺失:
1. Introduction
如何获得预期的结果?

顺便问一下,有没有一种简单的方法来获得$matches结果而不先使用-match语句或将-match语句组合为单行代码?

1 个答案:

答案 0 :(得分:2)

-match已经填充了自动变量$ Matches

> $Matches

Name                           Value
----                           -----
2                              1
1                              Introduction
0                              Introduction _ C# _ Tutorial 1

因此根本不需要-replace并重复RegEx。

但是您需要将数字转换为整数。

$string = "Introduction _ C# _ Tutorial 1"
if ($string -match "^([^_]+)_[^\d]+(\d{1,2})$") {
    "{0:D2}. {1}" -f [int]$matches[2],$matches[1]
}

示例输出:

01. Introduction