【问题标题】:replace numbers - powershell替换数字 - powershell
【发布时间】:2018-10-12 16:21:17
【问题描述】:

尝试创建一个脚本,将每个文件名组织成:年、月和日变量。

要在当前版本的 PowerShell 中执行此操作,我需要使用 -replace 但它只会从右到左删除数字。

如何替换前 4 位数字,在这种情况下将是这样的:20181015

$Month = $FileNameArray -replace "^2018"
$Month = $FileNameArray -replace "..$"

输出:

201801...201802...201803...201804...201805...201806...201807...201808...201809...2018010...2018011...2018012...

... 表示相同数量的重复实例。

【问题讨论】:

  • 您能否说明您想要实现的目标? 输入 字符串是什么?请提供一个真实的例子。
  • 你真的在 powershell v2 中这样做吗?
  • 你告诉我!老板希望我们使用 v2,我已经在 4.0 上并制作了一个可以在该版本中运行的脚本:(
  • 至于我想要实现的目标,我需要根据输出创建一组目录/文件夹,20180101 的示例文件路径将是 2018/01/01
  • 您根本不应该使用替换。在我看来,最好的选择是将字符串视为日期并使用 .Net 方法来解析日期部分。如果你不应该只是获取日期字符串的子字符串。

标签: regex powershell powershell-2.0


【解决方案1】:


你丢失了一个参数。
operator-replace有2个参数,第一个是源,第二个是目标,用逗号隔开。

"20181015" -replace "^2018","9999"

这将输出99991015,源支持正则表达式。

【讨论】:

  • 我如何将其替换为空
  • 只保留第二个参数为空,像这样:"20181015" -replace "^2018",你会得到1015。如果您需要更多答案,建议发布一些来源,以及您期望的结果。 :)
  • 或者除了Trim() 之外我还可以使用其他表达式,因为它在 v2 中不受支持
  • 如果你只想要月份,试试这个:"20181015" -replace "^\d{4}|\d{2}$",确保源的格式完全匹配yyyymmdd
  • (?) "Trim() 在 v2 中不受支持" - 不正确。
【解决方案2】:

我想我可能会感到困惑。我认为您的目标是根据日期创建路径。给定日期 20180101,您可以这样创建路径:

$date = [datetime]::parseexact("20180101", "yyyyMMdd", [System.Globalization.CultureInfo]::InvariantCulture)
$path = '{0}\{1:D2}\{2:D2}' -f $date.Year, $date.Month, $date.Day

无需进行任何替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2012-08-07
    • 2015-10-18
    相关资源
    最近更新 更多