在保留单个父目录的同时将文件复制到另一个文件夹

时间:2019-02-18 21:34:22

标签: powershell

我还是PowerShell的新手,我正在尝试做一些我还没有确切答案的事情。我们有一个大文件夹,其中包含许多子文件夹,这些子文件夹包含单个音频文件(我们的电话系统记录并将音频文件按日期放置在文件夹中)。我想从这些文件夹中获取某些文件,然后将它们移动到另一个文件夹,但是我想在新位置创建文件来自的父文件夹。我没有抓取文件夹中的所有文件,只有几个。例如:

我想将文件移动到C:\ CopyFrom \ 02182019 \ AudioFile.wav

我在C:\ CopyTo处有一个文件夹,但我希望目的地为C:\ CopyTo \ 02182019 \ AudioFile.wav

如果脚本不存在,我希望脚本创建该文件夹,但是如果脚本不存在,则希望将文件复制到该文件夹​​中。

我目前正在使用Get-ChildItem -Include来获取所需的文件,并将其通过管道传递到我在网上找到的foreach循环中。这与我所需要的差不多,但是它从根开始复制了ENTIRE文件夹结构,所以我的目的地最终是: C:\ CopyTo \ CopyFrom \ 02182019 \ AudioFile.wav

这是我到目前为止所拥有的:

Get-ChildItem $SourceFolder -Include $ExtArray -Recurse | forEach {
## Remove the original  root folder

  $split = $_.Fullname  -split '\\'

  $DestFile =  $split[1..($split.Length - 1)] -join '\' 

  ## Build the new  destination file path

  $DestFile =  "C:\DestinationFolder\$DestFile"

  ## Copy-Item won't  create the folder structure so we have to 

  ## create a blank file  and then overwrite it

  $null = New-Item -Path  $DestFile -Type File -Force

  Copy-Item -Path  $_.FullName -Destination $DestFile -Force

}

我在this article中发现了foreach循环。我以为我可以在$ split行中添加更多内容,以使我可以删除其余的目录结构,但是我对此还很陌生,并且对语法的理解不够。

我知道这很难解释,所以请让我知道是否需要澄清。

2 个答案:

答案 0 :(得分:0)

尝试一下:

$ExtArray = "keep"
$SourceFolder = "C:\source"
$DestFolder = "C:\dest"

Get-ChildItem $SourceFolder -Recurse -Include "*keep*"  | foreach {

    $source_dir = $_.DirectoryName
    $dest_dir = $_.DirectoryName.replace($SourceFolder, $DestFolder)

    if (Test-Path $dest_dir) {
      Copy-Item -Path $_ -Destination $dest_dir -Recurse
    } else {
      New-Item -Path $dest_dir -ItemType "directory" | out-null
      Copy-Item -Path $_ -Destination $dest_dir -Recurse
    }

}

答案 1 :(得分:0)

这是我的尝试-我将顶级目录设置为一个变量,并将底层文件夹结构设置为另一个。

$File = "C:\test\IT\testfile.docx"
$Destination  = "C:\test2\"
$test2 = "\IT\"

mkdir "$Destination\$test2"
Copy-Item -Path $File -Destination "$Destination\$test2" -recurse

我不确定如何在当前代码中实现此功能,但希望它能使车轮旋转并向正确的方向发送信号!