将目录中的文件复制到与文件同名的文件夹

时间:2018-01-04 03:18:25

标签: powershell

我有多个文件要将每个文件复制到同名的文件夹

例如,文件

orange_file100 , orange_file200 , orange_file300 , apple_file120 , apple_file150

我想将每个文件移动到包含部分文件名的文件夹,例如橙色和苹果,所以结果将是

orange\orange_file100
orange\orange_file200
orange\orange_file300

apple\apple_file120
apple\apple_file150

如果我使用Get-ChildItem然后使用ForEach{Copy-Item),我该如何通过powershell执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以Get-Childitem使用-File-Directory来抓取文件夹中的文件或文件夹,这样您就不会抓住文件夹并尝试将其放入自身。 例如,下面的代码只会获取当前目录中的文件

Get-Childitem -File

然后,您可以使用一些正则表达式来拆分名称,以便获得水果名称,例如

$String.split('_')[0]

您应该将其插入列表或数组或其他内容以存储它,但现在您有一个文件和水果名称列表。

现在,您可以遍历列表并开始将文件移动或复制到正确的文件夹结构

Foreach($file in $FileList){
    if($file.name -matches $Fruitname){
        if($file.name -notmatch $pwd.path ){
            mkdir $file.name
            cd $file.name
            move-item $file.fullname $pwd
        }
    }
}

上面的代码只是一个快速尝试。它可能不会在第一次工作,你应该做出调整,以了解你在做什么。

一些注意事项

  • $pwd获取当前目录。我假设Get-Childitem以正确的顺序返回文件列表,因此您将获得Orange_100,然后是Orange_200,依此类推
  • Get-Childitem返回一个powershell对象。可以使用$_.name访问文件名,也可以使用$_.fullname
  • 访问完整路径
  • 如果-matches不起作用,您还可以尝试-like-in
  • 我没有将第一个水果文件夹添加到上面的代码中,但创建
  • 并不困难

记得要四处玩,找到最适合你的。