将变量格式化为带有前导零的4位数

Cod*_*ent 4 powershell number-formatting

商店号码可以是1-4位数.

关于设备如何命名,商店#26将是0026,但我想让技术人员能够轻松地输入26来获得相同的结果.

如何通过附加前导零来获取此变量并将其格式化为始终为4位数?

## Ask user for store number and affected AP number to query
$Global:Store = Read-Host "Store Number ";
$Global:apNumber= Read-Host "AP Number ";

## Clean up input for validity
IF($store.length -le 4) {
  $store = 
}
Run Code Online (Sandbox Code Playgroud)

4c7*_*b41 10

你会使用-format运算符:

 '{0:d4}' -f $variable
Run Code Online (Sandbox Code Playgroud)

https://ss64.com/ps/syntax-f-operator.html

如果你的变量是一个整数,上面的代码将会起作用,如果不是,你可以将它转换为整数:

'{0:d4}' -f [int]$variable
Run Code Online (Sandbox Code Playgroud)

  • `'{0:d4}' - f + $ variable` (3认同)
  • `'{0:d4}'-f [int] $ variable`与Mathias的建议相同(在将值传递给格式字符串之前将值转换为整数),但可能更多关于什么它确实. (3认同)
  • 两者都有效,但我个人更喜欢使用单引号字符串,除非该字符串包含PowerShell应该扩展的内容(例如变量或转义序列)。只是为了避免意外。 (2认同)
  • @ 4c74356b41我总是使用带有格式运算符的单引号,这是一种微妙的方式,表示"不要在这里删除变量参考,让`-f`操作员做它的工作" (2认同)

js2*_*010 10

padleft 和 tostring 的 Foreach 版本。第一个中的 0 必须被引用:

'4' | % padleft 4 '0'
0004

4 | % tostring 0000
0004
Run Code Online (Sandbox Code Playgroud)

使用范围:

1..10 | % tostring 0000

0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
Run Code Online (Sandbox Code Playgroud)

带前缀:

1..10 | % tostring COMP0000

COMP0001
COMP0002
COMP0003
COMP0004
COMP0005
COMP0006
COMP0007
COMP0008
COMP0009
COMP0010
Run Code Online (Sandbox Code Playgroud)


Ans*_*ers 6

只是为了避免浪费PetSerAl的有用帮助(应该在某个时候删除注释):

除了使用格式运算符-f)(我认为是首选方法)外,您还可以使用相应值提供的格式化方法。

  • 首选 -f 运算符的充分理由是,如果系统管理员已锁定 Windows 10,则对 .NET 方法和属性的任何调用都将需要管理员访问权限,而 -f 是内置的 PowerShell 运算符,应始终适用于任何非管理员被允许使用 PowerShell 的用户,因为它不存在与安全相关的问题。 (3认同)