我还是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行中添加更多内容,以使我可以删除其余的目录结构,但是我对此还很陌生,并且对语法的理解不够。>
我知道这很难解释,所以请让我知道是否需要澄清。
答案 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
我不确定如何在当前代码中实现此功能,但希望它能使车轮旋转并向正确的方向发送信号!