我想将一堆带有起始名称的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
答案 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
}