组合路径、文件字符串和路径文本



尝试组合路径,文件名,并添加一些文本以及用于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-ssyyyy-MM-dd_HH-mm-ss以避免此陷阱。

最新更新