2011-09-12 136 views
0

我有一個腳本,重新命名從CSV採取的文件,但是當它改掉,重新命名文件後,它已經進行了成功的proceedure重命名從CSV腳本重命名文件,但改掉重複過程

它拋出一個錯誤

CSV文件是這樣的:

old  new 
AC100 DC100 
AC101 DC102 

代碼嘗試:

$sourceDir = read-host "Please enter source Dir:" 
$csvL = $sourceDir + "\files.csv" 
$csv = import-csv $csvL 
$files = get-childitem $sourceDir 
$csv | % { 
      ForEach($file in $files){ 
      if($file = $_.old){ 

      $old = $sourceDir + "\" + $_.old 

      Rename-Item $old $_.new 
        }  
       } 
      } 

我相信這是值得做的循環和CSV但林不知道在哪裏我去錯了,我之前有類似的問題。

以下是錯誤的示例。

+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 
Rename-Item : Cannot rename because item at 'C:\scripts\2039X.67438.TXT' does not exist. 
At C:\scripts\renamerTim.ps1:18 char:15 
+    Rename-Item <<<< $old $_.new 

在此先感謝, 克雷格

+0

它扔了什麼錯誤? – Rynant

+0

if($ file = $ _。old)也許是if($ file -eq $ _。old)。發佈你的錯誤.. –

回答

1

我覺得ForEach($file in $files)是多餘的,因爲你已經遍歷每個「文件」與$csv | % {命令。我想嘗試這樣的:

$csv | Foreach-Object { //I prefer to print the full commands in scripts 
    $oldfile = $sourcedir + "\" + $_.old 
    if (Test-Path $oldfile) 
    { 
     Rename-Item $oldfile ($sourcedir + "\" + $_.new) 
    } 
} 
+0

我想它會工作,因爲它會運行工作目錄上的重命名項目。我會給一個bash –

+0

這工作很好,謝謝。 –

1

你有一個冗餘的嵌套循環。 $csv | %{ ... }已經循環遍歷csv中的文件,然後foreach循環遍歷文件夾中的每個文件。

試試這個:

$sourceDir = read-host "Please enter source Dir:" 
    $csvL = $sourceDir + "\files.csv" 
    $csv = import-csv $csvL 
    $files = get-childitem $sourceDir 
    $csv | % { 
    $oldpath = join-path $sourcedir $_.old 
    $newpath = join-path $sourcedir $_.new 

    rename-item $oldpath $newpath 
    } 
+0

謝謝你,這是我在tbergstedt評論後得出的結論。但是,連接路徑cmdlet看起來像是一個強大的功能,我將把它集成到未來的腳本中。感謝您花時間看這個,非常感謝。 –

+0

是的,當tbergstedt發表他的評論時,我正在測試我的代碼。無論如何,我決定發帖以防萬一它有用 - 我很高興它是:)。 – JohnL