2014-12-19 48 views
1

我正在嘗試編寫一個簡單的腳本,它允許我檢查一個目錄,並找到任何匹配的文件名。 一旦找到匹配,我只想將curent datetime追加到文件名的前面。powershell v2 - 在一個目錄中找到一個文件並重命名它

這聽起來很容易,但我不能完全弄清楚

到目前爲止,我已經得到了

$directory = "c:\directoryName\" 
$filename = "filename.log" 
$d = Get-Date -format "yyyyMMddHHmm" 

get-childitem -Path $cfg_logDirectory | foreach-object 
{ 
    if ($_.name -eq $cfg_fileName) 
     { 
      $fname = $_.name 
      Rename-Item -NewName $d."_".$fname 
     } 
} 

但是當我運行這個(ISE中至少),我得到一個窗口出現,詢問我要

「Cmdlet的的ForEach-對象在命令管道位置2 - 提供值以下參數 :進程[0]」

這是要走的路嗎,還是有更好的方法來做到這一點?

回答

4

將您的開口大括號移到上一行的末尾。

get-childitem -Path $cfg_logDirectory | foreach-object { 

你得到錯誤,因爲PowerShell是假設行的結尾是語句的結束,然後再試圖提示你缺少的參數的foreach對象 - 在這種情況下,它的腳本塊*。將大括號移動到同一行可以告訴Powershell有更多的語句來臨。

*爲什麼'流程'? foreach-object cmdlet可以採用三個腳本塊作爲參數:BeginProcessEnd。開始和結束是可選的,但是過程是必需的。如果您提供沒有名稱的腳本塊,則假定它是Process。

+0

這就是我以爲我很聰明。 。 。歡呼,因爲它擺脫了過程[]窗口。重命名項目部分是否正確,因爲目前它不重命名該文件。 – IGGt 2014-12-19 11:14:01

+0

您的NewName字符串格式不正確。試試'Rename-Item -NewName「$ d_ $ fname」'。 Powershell中的字符串連接是'+',而不是''',但是您甚至不需要它,因爲您可以只評估字符串中的變量。 – 2014-12-19 20:50:41

相關問題