将具有相同名称的文件移动到匹配的命名文件夹

时间:2015-12-31 05:59:42

标签: powershell

初学者,我被困住了。

$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而不是转到fullname路径。如果有人能将我与一些有用的资源联系起来或者在正确的方向上推动我,我将不胜感激。仍然不确定如何访问子文件夹或创建唯一目标。我需要一个循环吗?

1 个答案:

答案 0 :(得分: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
        }

希望这会有所帮助 新年快乐 最好的祝福 斯特凡