2015-12-31 38 views
2

初學者和我卡住了。將具有相同名稱的文件移動到匹配的命名文件夾

$filter= "Alive" 
$source="D:\Users\Heather's\VendorScans\*" 

Get-ChildItem -recurse | ?{ $_.PSIsContainer } |Select-Object fullname | Where-Object {$_.fullname -match $filter} 
$destination= (Where-Object {$_.fullname -match $filter}) 

Copy-Item $source -destination $destination -recurse 

最初的問題是將名稱爲「Alive」的文件移動到名爲「Alive」的文件夾中。 所以我試圖從一個目錄文件夾中的子文件夾複製文件,我將它移動到同一個驅動器上的雙嵌套子文件夾。所以D:\Users\Heather's\VendorScans\*D:\Users\Heather's\Vendors\AliveHospice。等目的地將根據文件名是否匹配而改變。唯一的問題是,當我運行這個時,它將文件放在主目錄中,所以D:\Users\Heather's而不是去全名路徑。如果有人能夠將我聯繫到一些有用的資源,或者將我推向正確的方向,我將不勝感激。仍然不知道如何訪問子文件夾或創建獨特的目的地。我需要一個循環嗎?

+1

的'GET-ChildItem'行通過管道進行了大量過濾,但最終的結果並未保存,它離開管道,並且可能只是打印到屏幕上。 ('PSIsContainer'意味着它只包含文件夾,但是你討論想要文件?)。下一行'$ destination = ...'調用'沒有輸入的where-object',並保存空輸出 - 所以'Copy-Item'的目的地是空的。你可能確實需要一個或兩個循環,但我並不真正瞭解你在做什麼 - 你能舉一個例子說明哪個文件可能從哪裏移動到哪裏?目標文件名如何改變? – TessellatingHeckler

+1

目標文件夾名稱/位置是否已知?這是一條固定的路徑嗎?相對於文件或源文件夾?一個完全任意的位置? –

+0

來源始終是相同的(vendorscans文件夾),並且目的地與我選擇的過濾器有關。 (在我的最終版本中,我會得到類似於($ filter = Read-Host「請輸入過濾器名稱」)的腳本。腳本應讀取文件名並將文件移動或複製到同一D驅動器上的文件夾(可能是子文件夾)同樣的名字,也感謝你對Get-Childitem的解釋,我想我可以將它的結果保存到一個變量中! – Heather

回答

1

如果我有很好的理解你願意做的,這裏是對應的代碼:

$filter= "Alive" 
$source="D:\Users\Heather's\VendorScans" 
$destination ="D:\Users\Heather's\VendorScans" 
set-location $source 

$source_regex = [regex]::escape($source) 
(Get-ChildItem $source -recurse | where {-not ($_.psiscontainer)} | select -expand fullname) -match $filter | 
     foreach { 
      $file_name = ($_ | split-path -leaf) 
      $file_name_withoutextension = [System.IO.Path]::GetFileNameWithoutExtension($file_name) 
      $file_destination = $destination + '\' + $file_name_withoutextension 
      $file_dest = ($_ | split-path -parent) -replace $source_regex,$file_destination 

      if (-not (test-path $file_dest)){mkdir $file_dest} 
      copy-item $_ -Destination $file_dest 
     } 

希望這有助於 新年 問候 斯特凡

+0

謝謝!這是否將文件放入不同的文件夾或相同?:O – Heather

+0

IT WORKSSSS !! !你真了不起,謝謝。 – Heather

相關問題