我是一名初級技術人員,一直負責撰寫簡短的powershell腳本。問題是我5小時前開始學習PS - 一旦我的老闆告訴我被分配到這個任務。我有點擔心它不會在明天完成,所以希望你們能幫助我一點。任務是:移動具有相同名稱但擴展名不同的文件。 Powershell
我需要將文件移動到根據某些條件不同的文件夾,讓我從他的文件夾結構開始:
c:\LostFiles: This folder includes a long list of .mov, .jpg and .png files
c:\Media: This folder includes many subfolders withe media files and projects.
工作是從C移動文件:\ LostFiles到如果
來自c:\ LostFiles的文件的名稱對應於C:\ media的子文件夾中的文件名我們必須忽略擴展名,例如:
C:\ LostFiles有這些文件,我們n EED移動(如果可能):imageFlower.png,videoMarch.mov,danceRock.bmp
C:\媒體\花\早已這個文件:imageFlower.bmp,imageFlower.mov
imageFlower.png應被移動到這個文件夾(C:\ media \ Flowers),因爲存在或者存在具有完全相同基本名稱的文件(擴展名必須被忽略)
只有具有相應文件(相同名稱)的文件應該是移動。
到目前爲止,我已經寫了這段代碼(我知道它不是很多,但是現在我正在更新這段代碼(格林威治標準時間21:45),我知道我錯過了一些循環,嘿耶,我我錯過了很多
#This gets all the files from the folder
$orphans = gci -path C:\lostfiles\ -File | Select Basename
#This gets the list of files from all the folders
$Files = gci C:\media\ -Recurse -File | select Fullname
#So we can all the files and we check them 1 by 1
$orphans | ForEach-Object {
#variable that stores the name of the current file
$file = ($_.BaseName)
#path to copy the file, and then search for files with the same name but only take into the accont the base name
$path = $Files | where-object{$_ -eq $file}
#move the current file to the destination
move-item -path $_.fullname -destination $path -whatif
}
哇,這太神奇了,它效果很好!謝謝!我不明白這一點:** Move-Item -whatif $ _。FullName $ mediaFiles [$ _。Ba seName]} **。爲什麼只有在需要指定目標文件夾時才調用.BaseName? – Okrx
對不起,直接問你,但你似乎也必須知道這個問題的答案:我們如何生成一個文件已被移動到新位置的報告? – Okrx
BaseName是散列表中的鍵,返回的值是要將其移動到的目錄。 – dugas