根据文件名的一部分将文件移动到另一个文件夹

时间:2017-03-16 10:42:52

标签: powershell

Hello Power Shell Champs,

我有一个情况。

我在C:\ reports中有大约100个带国家/地区名称示例的文件:

  • 报告文件-USA.ppt
  • 报告文件 - Canada.ppt
  • 报告文件-Bar.ppt
  • 报告文件-Chile.ppt

我的国家/地区名称文件夹也位于文件夹C:\ Countries

我想要做的是根据国家名称将基于国家/地区名称的文件移动到相应的文件夹中。

我可以创建一个有效的循环。 注意:目标文件夹已经创建,只需要移动文件

3 个答案:

答案 0 :(得分:0)

正如Maigi所提到的,这里是工作代码,它实际上是您在原始帖子中请求的Move-Item,而不是Copy-Item

此代码已经过测试并有效。

$list = (Get-ChildItem -Path C:\reports\ -Name -File).Replace('Report File-','').Replace('.ppt','')

ForEach-Object ($item in $list) 
{
    Move-Item -Path "C:\reports\Report File-$($item).ppt" -Destination "C:\Countries\$($item)\"
}

答案 1 :(得分:0)

在PowerShell中始终有多种方法可以完成任务: 这个脚本

  • 在连字符处拆分BaseName,并取第二部分(基于零)
  • 如果目标路径不存在则创建它。
Get-ChildItem 'C:\reports\Report File-*.ppt' -File | ForEach-Object{
  $Country = Join-Path "C:\Country" $($_.BaseName.split('-')[1])
  If (!(Test-path $Country)) {mkdir $Country|Out-Null}
  $_|Move-Item -Destination $Country -whatif
}

如果输出看起来没问题,请删除-whatif

答案 2 :(得分:-1)

虽然你身边的一些代码可以看到你有多大帮助,但我想这样的事情可以解决问题: (编辑)的

$list = (Get-ChildItem -Path C:\reports\ -Name -File).Replace('Report File-','').Replace('.ppt','')

foreach ($item in $list) {
Move-Item -Source ".\Report File-$($item).ppt" -Destination "C:\Countries\$($item)\"
}