尝试组合路径,文件名,并添加一些文本以及Out-File
日志的变量。
我尝试了很多替代方案但未成功,需要帮助;
FormattedDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$OldVersion = C:\Temp\TestFile.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:\Temp\TestFile_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}'
所做的资源?
答案 0 :(得分:1)
使用format operator(-f
)构建文件名,使用Join-Path
构建路径。
$oldpath = 'C:\Temp\TestFile.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
除非您必须拥有日期格式的空格,否则您可以使用standard sortable format specifier(s
)来简化格式字符串,这将生成2017-08-24T23:58:25
而不是{{1}之类的日期字符串}}
2017-08-24 23:58:25
如果要将路径构造为带有内联变量的字符串,则需要确保文件名中的下划线与变量名称保持独立。由于下划线是变量名$filename = '{0}_{1:s}_Error{2}' -f $basename, (Get-Date), $extension
的有效名称组件,因此变量$var_
,而不是变量var_
后跟文字下划线。使用花括号来确保变量和文字下划线不会混淆。
var
附录:您的文件名不应包含冒号。 Windows路径中的冒号终止驱动器名称或将文件名与alternate data stream的名称分开。您的日期格式字符串应该类似于$oldpath = 'C:\Temp\TestFile.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}"
或yyyy-MM-dd HH-mm-ss
,以避免此陷阱。