2017-02-10 71 views
0

我仍然普遍對PowerShell不熟悉,並且我正在嘗試創建一個程序,該程序將根據名稱獲取文件,並將它們移動到具有相似名稱但不完全相同相同。例如,假設我有3個文件,Apples.txt,Grapes.txt和Oranges.txt。我想將它們移動到相應的文件夾中,Apple Apples USA,GrapesNY,OrangesFL。 我可以使用循環和If-Then語句對其進行硬編碼。即如果Apples.txt存在移動到ApplesUSA。但我希望它是動態的,所以如果其他文件和文件夾稍後添加,我不必更新代碼。有沒有辦法編寫一個聲明,說如果FileA和FolderB名稱相似(都包含名稱中的蘋果),然後將fileA移動到FolderB等等。 任何幫助表示讚賞。謝謝!!!!基於類似文件和文件夾名稱的文件分類

+0

取代。在PowerShell中,'獲取幫助About_Comparison_Operators' – user4317867

+0

如果可以清楚地描述的模式,例如「完整的文件名與文件夾名稱的開始匹配」,然後是,從簡單到詳盡的搜索每個重疊字符集。如果沒有比理解英文更簡單的模式來建立連接,那麼https://xkcd.com/1425/ – TessellatingHeckler

+0

嗯,ID表示80%的文件在與將要移動到的文件夾匹配時死亡。這是容易的部分,它的另一對文件是問題,但模式是相同的。將Apples.txt移至文件夾ApplesUSA。猜猜主要的問題是我如何做一個可以在文件名開頭找到的比較? –

回答

0

嘗試這樣的事情

$PathWithFile="C:\temp\Test" 
$PathWithDir="C:\temp\Test" 

Get-ChildItem $PathWithFile -file -Filter "*.txt" | %{ 
$CurrentFile=$_ 
$Dirfounded=Get-ChildItem $PathWithDir -Directory | where {$_ -match $CurrentFile.BaseName} | select FullName -First 1 
if ($Dirfounded -ne $null) 
{ 
    move-Item $CurrentFile.FullName -Destination $Dirfounded.FullName -WhatIf 
} 

} 
0

一個oneliner類似@ Esperento的

gci *.txt -af|%{$File=$_.FullName;gci "$($_.BaseName)*" -ad|%{Move $File -Dest $($_.FullName) -whatif}} 

的詳細的版本:

PushD "X:\path\to\base\folder" 
Get-ChildItem *.txt -File | ForEach-Object{ 
    $File = $_.FullName 
    Get-ChildItem "$($_.BaseName)*" -Directory | ForEach-Object { 
    Move-Item $File -Destination $_.FullName -whatif 
    } 
} 
PopD 

兩個版本都需要PowerShell的V3爲-File-Directory參數(和他們的別名-af/-ad)這可以通過附加的|Where-Object{ $_.PSIsContainer}各自| Where-Object{!$_.PSIsContainer}

相關問題