【问题标题】:Is there a term used to describe variables that are not set as [int] or [string], etc?是否有一个术语用于描述未设置为 [int] 或 [string] 等的变量?
【发布时间】:2021-04-20 05:55:32
【问题描述】:

以下代码根据用户偏好计算完整的 ISO 日期或 ISO 周。 $Year、$Month 和 $Day 设置为整数。 $Week 没有被设置为任何东西。如果我将 $Week 设置为整数,则代码不会将前导零添加到周数,这不是交易杀手,但 ISO 周通常以这种方式格式化。如果我将其设置为字符串,则会导致错误。作为更好的做法,我可以使用单独的变量来添加前导零并在两个可能的结果中的任何一个中使用该变量,但我真正想知道的是我应该如何引用它。我会称它为 VB 语言的变体,但它在 PowerShell 中叫什么?

Function Get-ISODate {

    Param(
    [datetime]$Date = (Get-Date),
    [switch]$LongFormat
    )

    [int]$Year = $Date.Year

    [int]$Month = $Date.Month

    [int]$Day = $Date.DayOfWeek.value__

    If ($Day -eq 0) {$Day = 7}

    If ($Day -ge 1 -and $Day -le 3) {$Date = $Date.AddDays(3)}

    $Week = (Get-Culture).Calendar.GetWeekOfYear($Date, 'FirstFourDayWeek', 'Monday')

    Switch ($Week)
    {

        52 {If ($Day -ge 5 -and $Day -le 7 -and $Month -ne 12) {$Year = $Year - 1} ; Break}

        53  {If ($Day -ge 5 -and $Day -le 7 -and $Month -ne 12) {$Year = $Year - 1} ; Break}

        1 {If ($Month -eq 12) {$Year = $Year + 1} ; Break}

    }

    $Week = $Week.ToString('00')

    If ($LongFormat.IsPresent)
    {
    
        "$Year-W$Week-$Day"  
                  
    } 
    
    Else
    {

        "W$Week"

    }       

}

【问题讨论】:

  • 您仍然可以使用[int] 变量并在需要时使用它进行计算,如果您只在需要的输出中使用所需的格式,则使用前导零。如果您需要前导零,您可以使用-f(格式)运算符。 ...如果我说对了。 ;-)
  • 谢谢奥拉夫。我以前见过 -f ,但我不确定如何使用它。我可以直接用"$Year-W$Week-$Day""W$Week" 做吗?
  • 如果我做对了,您可以将其用于您的-LongFormat 输出:'{0}-W{1:d2}-{2:d2}' -f $Year, $Week, $Day
  • 你能告诉我在哪里编辑代码吗?我将不胜感激,因为我仍然是 PowerShell 新手。
  • 把这个"$Year-W$Week-$Day"改成这个'{0}-W{1:d2}-{2:d2}' -f $Year, $Week, $Day

标签: powershell


【解决方案1】:

我找不到明确的参考,但有几篇 Microsoft 文章称它们为 typed vs untyped,这很有意义...

About Assignment Operators

减法运算符的赋值

要删除变量,请使用 Remove-Variable cmdlet。当变量显式转换为特定数据类型并且您需要 untyped 变量时,此方法很有用。以下命令删除 $a 变量:

Remove-Variable -Name a

About Script Bblocks

使用带参数的延迟绑定脚本块

接受管道输入(按值)或(按 PropertyName)的 typed 参数允许在参数上使用延迟绑定脚本块。在延迟绑定脚本块中,您可以使用管道变量 $_ 引用管道输入的对象。

参数不能是untyped,参数的类型不能是[scriptblock]或[object]。

【讨论】:

  • 嗨,typeduntyped 是有意义且容易记住的。谢谢!
猜你喜欢
  • 2013-02-16
  • 2018-04-02
  • 2011-06-09
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多