为什么在我的字符串中没有正确替换占位符?

时间:2016-06-16 10:11:28

标签: powershell

我在尝试格式化字符串时遇到了不同的错误:

$dir = "c:\path"
$logfile = "$dir\logfile_{0}.txt" -f (get-date -format "yyyymmdd_hhmmtt")

Function Log($message) {
    $message = "{0}: {1}" -f (get-date) $message
    write-host $message
}

Log "Start processing {0}" -f ($_.FullName)

我希望$logfilec:\path\logfile_20160616_121012.txt,但我会获得c:\path\logfile_20160116_1201nachm.等格式

我希望Log输出16.06.2016 12:01:20 Start Processing Myfile.xlsx,但我得16.06.2016 12:01:20 Start Processing 16.06.2016 12:01:20

我做错了什么?

2 个答案:

答案 0 :(得分:1)

  1. 您正在尝试访问最后一行($_.FullName)的管道变量,但您不使用任何管道。在将字符串传递给Log函数之前,您还需要将格式放在括号中。

  2. 您在Log函数中的格式参数中缺少逗号:

    $dir = "c:\path"
    $logfile = "$dir\logfile_{0}.txt" -f (get-date -format "yyyymmdd_hhmmtt")
    
    Function Log($message) {
        $message = "{0}: {1}" -f (get-date), $message
        write-host $message
    }
    
    Log ("Start processing {0}" -f $logfile)
    

答案 1 :(得分:1)

日期格式字符串tt末尾的yyyymmdd_hhmmtt是AM / PM指示符。

根据您收到的输出,您可能正在运行具有德语区域设置的操作系统(Nachmittag = PM)。

如果您想要秒数,请改用ss。如果没有AM / PM指示符,您可能应该切换到使用24小时时间(将hh替换为HH)。

您可以将日期格式字符串放在占位符中:

"$dir\logfile_{0:yyyymmdd_HHmmss}.txt" -f (Get-Date)

Log函数中,请注意-f运算符的参数需要以逗号分隔。