我在尝试格式化字符串时遇到了不同的错误:
$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)
我希望$logfile
为c:\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
我做错了什么?
答案 0 :(得分:1)
您正在尝试访问最后一行($_.FullName
)的管道变量,但您不使用任何管道。在将字符串传递给Log
函数之前,您还需要将格式放在括号中。
您在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
运算符的参数需要以逗号分隔。