powershell - Copy-Item创建空文件夹

时间:2017-07-07 06:47:59

标签: powershell directory subdirectory copy-item

我想将一堆带有起始名称的jpg / gif文件复制到另一个位置。它不按预期工作。它会创建保留emtpy的附加文件夹,不会复制所有子文件夹。然后我再次遍历整个路径并删除所有空文件夹。

如何防止Copy-Item创建额外的空文件夹?我想保留当前路径的新根,并添加一个新的子目录,其中包含文件名的起始字母,并将所有文件放在那里。

当前文件夹结构

if ENV["HTTP_HOST"] == "myapp.herokuapp.com"
  // Send the redirection and finish the request
end

想要的文件夹结构

F:\pics\2016\071310
|
-----> K001
  | 
  ------> 0494434-002394
  ------> 0494434-002394
.
.
------> K0073

这是我的代码

C:\test\2016\071310
|
-----> K001
  | 
  ------> 0494434-002394
     |
     ----> K-G
     ----> K-F
     .
     .
  ------> 0494434-002394
     |
     ----> K-G
     ----> K-F
     .
     .
.
.
------> K0073

1 个答案:

答案 0 :(得分:1)

当前脚本

  • $_.PSIsContainer - 我认为你要保留文件夹结构但最好忽略,因为你并不直接对它们感兴趣。 AFAICS这就是您获取空文件夹的原因。
  • -Exclude $folder - 这不是做任何事情;名称为K-G的文件夹仍会包含在内。

  • $item.FullName.ToString() - ToString()无效,因为$item.FullName已经是一个字符串。运行$item.Fullname.GetType().Name即可查看。

提议的脚本

  • Split-path允许您使用-Parent获取文件所在的目录。

  • .Replace($source,$destination)与原始剧本一样。

  • 您不需要硬编码$folder即可将其送到您的目的地。只需使用$item.Name.SubString(0,3)获取文件名的前3个字母 <子> string manipulation demo

$bin = Get-ChildItem -Path $source -Recurse | Where-Object {($_.Name -match $filterKG)}

foreach ($item in $bin){

    $new_folder = (Split-path $item.Fullname -Parent).Replace($source,$destination) + "\" + $item.Name.SubString(0,3) + "\"

    if(-not (Test-Path $new_folder)){
        New-Item -Type dir $new_folder
        Write-Host $new_folder
    }

    Copy-Item $item.FullName -Destination $new_folder 

}