2011-05-26 68 views
1

我想使用PowerShell來移動匹配的文件名集(1個作業文件和1個觸發器文件只有同名不同的擴展名)從一個目錄到另一個。見下面的例子。使用PowerShell將具有相同名稱但擴展名不同的一組匹配的文件移動到兩個不同的目的地

源目錄包含job1.zip,job1.trg,job2.zip和job2.trg。我想將匹配的作業名稱job1.zip和job1.trg移動到dest1文件夾,只有當它是空的時候,如果不將它移動到dest2folder。然後循環執行job2.zip和job2.trg的相同邏輯。我還必須考慮的一件事是Source目錄可能只包含job1.zip等待job1.trg被傳輸。我是PowerShell的新手,並且試圖讓它無法成功地工作數小時。可能嗎?

這是我到目前爲止。我使用IF邏輯將文件移動到每個目標文件夾,但它將移動源目錄中的所有文件。

$doirun = (get-childItem "d:\ftproot\pstest\").Count 

$filecount = (get-childItem "d:\ftproot\ps2\").Count 

if ($doirun -le 1) {exit} 

$dir = get-childitem "d:\ftproot\pstest\" | Where-Object {($_.extension -eq ".zip") -or ($_.extension -eq ".trg")} 

foreach ($file in $dir) 
{ 
    if ($filecount -le 2) {Move-item "d:\ftproot\pstest\$file" "d:\ftproot\ps2\"} 
    else {Move-item "d:\ftproot\pstest\$file" "d:\ftproot\ps3\"} 
} 

回答

2

沒有廣泛的測試,但我相信這應該工作:

$jobs = gci d:\ftproot\pstest\* -include *.zip,*.trg | 
    select -expand basename | sort -unique 
$jobs |foreach-object { 
if (test-path d:\ftproot\pstest\$_.zip -and test-path d:\ftproot\pstest\$_.trg){ 
    if (test-path d:\ftproot\pstest\ps2\*){ 
    move-item d:\ftproot\pstest\$_.zip d:\ftproot\pstest\ps3 
    move-item d:\ftproot\pstest\$_.trg d:\ftproot\pstest\ps3 
    } 
    else { 
    move-item d:\ftproot\pstest\$_.zip d:\ftproot\pstest\ps2 
    move-item d:\ftproot\pstest\$_.trg d:\ftproot\pstest\ps2 
    } 
    } 
+0

感謝Mjolinor的作品!我不得不在第一次測試中添加一些括號以使「和」邏輯正常工作。 「if((test-path d:\ ftproot \ pstest \ $ _。zip) - 和(test-path d:\ ftproot \ pstest \ $ _。trg)){」感謝您花時間幫助我。 – coolbyte2005 2011-05-26 16:45:30

+0

請將此標記爲正確答案。 – JasonMArcher 2011-06-18 17:28:26

相關問題