首页/系统/Windows 运维速查/-f 格式化运算符
PowerShell 基础66 条

-f 格式化运算符

用 {0}/{1} 占位符格式化字符串,常用于生成对齐输出与固定宽度报表。

Windows 运维速查系统更新于 2026-10-13

-f 运算符是什么

PowerShell 的 -f 是格式化运算符,把左侧字符串里的 {0}、{1} 占位符按顺序替换成右侧的值,底层是 .NET 的 String.Format。它解决的问题是「把变量规规矩矩塞进固定模板」:日报表格要列对齐、日志前缀要统一时间格式、文件名要补零编号,用 -f 比一堆加号拼接更清晰,也更容易控制小数位与对齐宽度。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7 均支持
语法'模板 {索引[,对齐][:格式]}' -f 值1, 值2
索引从 0 开始,可重复引用同一参数
对齐整数为右对齐宽度,负数为左对齐宽度,如 {0,-12}
格式说明符D 补零整数、N 千分位、F 定点小数、P 百分比、X 十六进制、日期用 yyyy-MM-dd
相关替代字符串插值如 "$($obj.Name)"、-join、格式化为表格的 Format-Table

典型使用场景

  • 对齐报表:把名称、地址、数值排成固定宽度,看的人一目了然
  • 日志前缀:统一输出「时间 级别 消息」,便于后续检索与切分
  • 数值展示:容量换算为 GB 并保留一位小数,避免长尾小数
  • 文件名时间戳:生成 backup_2026-10-13_0200.zip 这类规范名称
  • 拼装命令与 SQL 片段:模板清晰、易审阅(注意参数来源可信)

常用示例

常用示例
'{0} 端口 {1}' -f 'web', 80                        # 最基本的替换
'{0,-20} {1,8}' -f 'node-01', '10.0.0.11'           # 左对齐 20 宽 + 右对齐 8 宽
'{0,8:N0} MB' -f ((Get-Item D:\iso.iso).Length / 1MB)  # 千分位、不保留小数
'{0:yyyy-MM-dd HH:mm}' -f (Get-Date)                 # 日期时间格式化
'disk {0:P1} used' -f 0.783                          # 百分比并保留一位小数
'server-{0:D3}' -f 7                                 # 补零成三位编号
'{0}{1}' -f 'a', 'b'                                 # 相邻占位符直接相接
'{{0}} {0}' -f 'x'                                   # {{ }} 输出字面大括号

常见格式说明符

写法含义示例输出
{0:D3}十进制整数补零007
{0:N1}千分位分隔,保留一位小数12,345.7
{0:F2}定点小数两位3.14
{0:P1}百分比一位小数78.3%
{0:X4}十六进制补零四位00FF
{0,-12}左对齐占位 12 个字符node-01
{0:yyyy-MM-dd}日期格式2026-10-13
对齐宽度按字符数计算:汉字在等宽终端里占两个显示位,但 -f 只算一个字符,中文列混排时宽度要自行留出余量,否则表格会错位。
参数个数少于占位符会直接报错(索引越界),多传的参数则被忽略;模板改动后要同步核对参数列表,这类错误在批处理循环里往往到某个分支才暴露。

与其它写法的对照

与其它写法的对照
'{0} = {1}' -f 'a', 1                     # 模板集中,适合多列报表
"$('a') = $(1)"                            # 字符串插值,短文本更自然
('a' + ' = ' + 1)                           # 加号拼接,类型混用易出错
'{0,10}' -f 'x'                             # 等价于 ('x').PadLeft(10)
Get-Process | Format-Table Name, @{n='MB'; e={[math]::Round($_.WS/1MB,1)}}   # 表格输出用计算属性
用 -f 拼装 SQL 或命令行时,外部可控的数据会直接进入语句或命令,形成注入风险;这类位置应改用参数化查询或 -ArgumentList 传参,别靠模板拼接。

易错点

  • 占位符与参数数量不匹配:少了会报索引越界,多了静默忽略,报表里出现错位或漏值
  • 用 {0,8} 对齐中文列:一个汉字只算一个字符宽,终端里显示却占两位,表格必然错位
  • 在模板里直接写 { 或 }:必须写成 {{ 与 }},否则被当作占位符起始而报格式错误
  • 用 -f 拼接 SQL 或外部命令,可控数据未过滤,造成注入风险
  • 把日期当字符串用 -f 格式化(值本身就是字符串)时得不到预期格式,需先转成 DateTime

数据来源与参考

  • Microsoft Learn:about_Operators(格式化运算符)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌