尝试组合路径,文件名,并添加一些文本以及用于Out-File
日志的变量。
我尝试了许多替代方案,但没有成功,需要帮助;
FormattedDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$OldVersion = C:TempTestFile.txt
$OldPath = (Get-Item $OldVersion).DirectoryName
$OldBaseName = (Get-Item $OldVersion).BaseName
ErrFile = Join-Path $OldPath OldBaseName
Out-File -FilePath "$ErrFile_$FormattedDate Error.txt"
Out-File -FilePath "$($OldPath)$($OldBaseName)_$($FormattedDate)_Error.txt"
。仅举两个例子。
我尝试了许多其他组合,让我发疯。
基本上我希望它是。
C:TempTestFile_2017-08-24 16:51:36_Error.txt
更新:
我都试过了
$filename = '{0}_{1:s}_Error{2}' -f $basename, (Get-Date), $extension
我得到_2017-08-25T13:02:17_Error.txt
但没有基本名称(TestFile
(。
$newpath = "${dirname}${basename}_${date}_Error${extension}"
我得到
名称为"_2017-08-25 13"的驱动器不存在。
您能否解释或提供'{0}_{1:s}_Error{2}'
和/或'{0}_{1:yyyy-MM-dd HH:mm:ss}_Error{2}'
的资源?
使用格式运算符 (-f
( 构造文件名,使用Join-Path
构建路径。
$oldpath = 'C:TempTestFile.txt'
$basename = [IO.Path]::GetFileNameWithoutExtension($oldpath)
$extension = [IO.Path]::GetExtension($oldpath)
$filename = '{0}_{1:yyyy-MM-dd HH:mm:ss}_Error{2}' -f $basename, (Get-Date), $extension
$newpath = Join-Path ([IO.Path]::GetDirectoryName($oldpath)) $filename
除非必须具有日期格式中的空格,否则您可以使用标准的可排序格式说明符(s
(来简化格式字符串,该说明符将生成日期字符串,例如2017-08-24T23:58:25
而不是2017-08-24 23:58:25
。
$filename = '{0}_{1:s}_Error{2}' -f $basename, (Get-Date), $extension
如果要使用内联变量将路径构造为字符串,则需要确保文件名中的下划线与变量名称分开。因为下划线是变量名的有效名称组成部分$var_
是变量var_
,而不是变量var
后跟文字下划线。使用大括号可确保变量和文字下划线不会混淆。
$oldpath = 'C:TempTestFile.txt'
$date = (Get-Date).ToString('yyyy-MM-dd HH:mm:ss')
$dirname = [IO.Path]::GetDirectoryName($oldpath)
$basename = [IO.Path]::GetFileNameWithoutExtension($oldpath)
$extension = [IO.Path]::GetExtension($oldpath)
$newpath = "${dirname}${basename}_${date}_Error${extension}"
附录:文件名不应包含冒号。Windows 路径中的冒号要么终止驱动器名称,要么将文件名与备用数据流的名称分开。您的日期格式字符串应该类似于yyyy-MM-dd HH-mm-ss
或yyyy-MM-dd_HH-mm-ss
以避免此陷阱。