2013-01-11 55 views
1
在文件名括號

$基本上我試圖做的是:如何批量複製的文件與使用PowerShell

我從包含我需要的文件列表的.csv電子表格拉動信息。問題是,它們所在的目錄包含16,000多個文件!我只需要其中大約4600個(因爲電子表格列僅包含很多)。實際上,我已經弄清了代碼的所有部分......但是遇到問題的時候就是當它到達我的代碼的「Copy-Item」部分時。它運行良好,直到它碰到有括號作爲文件名的一部分的文件,所以它當然會拋出錯誤,並且不會給我我需要的東西。我怎樣才能解決這個問題?請注意,需要/被複制的文件不能被重命名。如果這是一個解決方案,我不確定如何在這裏使用「-LiteralPath」。 :(這裏是我下面的代碼:

$Directory = gci D:\Documents\15075_32\ 
$Destination = "D:\CleanReview" 
$ReviewSheet = import-csv 'C:\Users\7cm\Desktop\Internal Review - Emails Removed per Attorney Request.csv' 
$BaseItem = foreach($li in $ReviewSheet){$li.Base} 
foreach($File in $Directory){ 
    $File.BaseName 
foreach($Item in $BaseItem){ 
    if($Item -like $File.BaseName){ 
     $Item 
      Copy-Item $File.FullName $Destination -Force 
} 
} 
} 

回答

0

好的......經過谷歌的大量研究後,我發現即使在PS的V3中有更正,甚至使用-LiteralPath運算符,仍然可以通過通配符解釋文件名我發現IF語句中的操作符導致了這種情況,即使在使用-LiteralPath時,它也在IF語句中,當條件是真正。所以爲了解決這個問題,然後讓它讀取沒有通配符解釋的文件名,我不得不把它改成-eq,因爲-eq不支持通配符。我遇到的下一個問題是PS一直在報告它無法找到正在C盤中查找的文件!即使我已經聲明瞭目錄,甚至在我將在複製命令中以簡寫形式使用聲明之後,它仍然會這樣做! PS似乎對此非常不利,因此我發現,爲劇本完全拼寫完全是爲了達到我需要的效果!所以要回顧一下,我正在讀取一個csv並閱讀其中一列,因爲該列是沒有擴展名的文件名列表。我將該列表與目錄列表進行比較,當列名稱列表與目錄中的基名稱匹配時...我需要將這些目錄文件複製到D驅動器上的另一個文件夾中。這是我的工作代碼!感謝Keith Hill(上圖),我開始有點不同地看待它!謝謝你的幫助!

$Directory = gci -LiteralPath D:\Documents\15075_32\ 
$Destination = "D:\CleanReview\" 
$ReviewSheet = import-csv 'C:\Users\7cm\Desktop\Internal Review - Emails Removed per Attorney Request.csv' 
$BaseItem = foreach($li in $ReviewSheet){$li.Base} 
foreach($File in $Directory){ 
foreach($Item in $BaseItem){ 
    if($Item -eq $File.BaseName){ 
     $Item 
      Copy-Item -LiteralPath D:\Documents\15075_32\$File -Destination $Destination -Force 
} 
} 
} 
1

如果你想要做的批量複製與重試文件的能力,我會考慮使用robocopy,而不是如果你仍然想使用拷貝項目使用其-LiteralPath參數的。源代碼路徑

+0

你是什麼意思?像這樣: $ Directory = gci -LiteralPath D:\ Documents \ 15075_32 \ –

+0

我將-LiteralPath放置在目錄的路徑中,但是我沒有看到這將如何改變,因爲我聲明瞭那個文件稍後分開。另外,我看到了類似於支持通配符的地方,即使我正在從字面上看它,它仍然會拋出通配符錯誤。所以我將我的操作員切換到-eq,但現在它告訴我無法找到我的.MSG文件,因爲路徑不存在。因此,我將$ Directory添加到$ File($ Directory + $ File)到複製項目行中。但現在即使文件名相同,也不會複製它們! :( –

+0

我能夠解決這個問題,並得到我想要的結果。我有一個解釋如下。 –