2017-08-24 110 views
0

試圖結合路徑,文件名,並添加一些文本以及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}'的功能嗎?

回答

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 specifiers)簡化格式字符串的空間,這將產生像​​而不是2017-08-24 23:58:25日期字符串。

$filename = '{0}_{1:s}_Error{2}' -f $basename, (Get-Date), $extension 

如果你想構建的路徑與你需要確保你的文件名中的下劃線分開保存變量名在線變量的字符串。因爲下劃線是變量名稱的有效名稱組件$var_是變量var_,而不是變量var,後面跟着文字下劃線。使用大括號來確保變量和文字下劃線不會混淆。

$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}" 

附錄:您的文件名不應包含冒號。 Windows路徑中的冒號要麼終止驅動器名稱,要麼將文件名與alternate data stream的名稱分開。您的日期格式字符串應該是yyyy-MM-dd HH-mm-ssyyyy-MM-dd_HH-mm-ss,以避免此陷阱。

+0

我試過了; '$ 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-你還可以解釋或提供什麼的資源; '{0} _ {1:s} _Error {2}'和/或'{0} _ {1:yyyy-MM -dd HH:mm:ss} _Error {2}'? –

+0

第一個被剪斷的代碼需要修正(「Join-Path」的第一個參數必須在括號內)。我用PowerShell v2測試了第一個和最後一個代碼片段和v3,並且它們工作正常,請提供證據證明它們是否不適合您。顯示您正在使用的完整代碼以及完整的o輸出代碼生成。 –

+0

*你還可以解釋或提供什麼資源; '{0} _ {1:s} _Error {2}'和/或'{0} _ {1:yyyy-MM-dd HH:mm:ss} _Error {2}'?*我已經這樣做了。請閱讀我的答案。 –