将文件上移一级文件夹

ell*_*gcf 2 directory powershell parent file-move

我有一个名为“四月报告”的文件夹,其中包含一个月中每一天的文件夹。然后,每个文件夹都包含另一个包含PDF文件的文件夹:

四月报告
2018年1月4日
?天报表
?批准.pdf
?未经批准.pdf
?
2018年2月4日
?天报表
?批准.pdf
?未经批准.pdf
?
?
2018年4月30日
  天报表
    批准.pdf
    未经批准.pdf

PDF每天都有相同的名称,因此我要做的第一件事是将它们上移一个级别,这样我就可以使用包含日期的文件夹名称来重命名每个文件,以便包含日期。我尝试过的脚本是这样的(在“ April Reports”中设置了路径):

$files = Get-ChildItem *\*\*
Get-ChildItem *\*\* | % {
    Move-Item $_.FullName (($_.Parent).Parent).FullName
}
$files | Remove-Item -Recurse
Run Code Online (Sandbox Code Playgroud)

删除多余文件夹“ dayreports”的步骤有效,但文件尚未移动。

Ans*_*ers 5

您的代码中有2个错误:

  • Get-ChildItem *\*\*枚举dayreport文件夹(这就是删除文件夹的原因),而不是其中的文件。您需要Get-ChildItem $filesGet-ChildItem *\*\*\*枚举文件。

  • FileInfo对象没有属性Parent,只有DirectoryInfo对象有。将属性Directory用于FileInfo对象。同样,点访问通常可以以菊花链方式进行,因此不需要所有的括号。

这不是一个错误,而是一个过度复杂的问题:Move-Item可以直接从管道读取,因此您无需将其放入循环中。

将您的代码更改为这样的代码,它将执行您想要的操作:

$files = Get-ChildItem '*\*\*'
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }
$files | Remove-Item -Recurse
Run Code Online (Sandbox Code Playgroud)