因此,文件夹结构如下所示:
我想要做的是将文件夹中的所有.txt文件(其(文件夹)名称包含 eng )复制到目标文件夹。只是文件夹中的所有文件 - 而不是文件结构。
我使用的是:
$dest = "C:\Users\username\Desktop\Final"
$source = "C:\Users\username\Desktop\Test1"
Copy-Item $source\eng*\*.txt $dest -Recurse
问题是它只复制每个父文件夹的.txt文件,而不复制子文件夹。
如何在此脚本中包含所有子文件夹并同时保持 eng 名称检查?你能帮我吗?
我说的是PowerShell命令。我应该使用robocopy吗?
答案 0 :(得分:8)
另一种PowerShell解决方案:)
# Setup variables
$Dst = 'C:\Users\username\Desktop\Final'
$Src = 'C:\Users\username\Desktop\Test1'
$FolderName = 'eng*'
$FileType = '*.txt'
# Get list of 'eng*' file objects
Get-ChildItem -Path $Src -Filter $FolderName -Recurse -Force |
# Those 'eng*' file objects should be folders
Where-Object {$_.PSIsContainer} |
# For each 'eng*' folder
ForEach-Object {
# Copy all '*.txt' files in it to the destination folder
Copy-Item -Path (Join-Path -Path $_.FullName -ChildPath '\*') -Filter $FileType -Destination $Dst -Force
}
答案 1 :(得分:1)
你可以这样做:
$dest = "C:\NewFolder"
$source = "C:\TestFolder"
$files = Get-ChildItem $source -File -include "*.txt" -Recurse | Where-Object { $_.DirectoryName -like "*eng*" }
Copy-Item -Path $files -Destination $dest
答案 2 :(得分:1)
另一种观点:
$SourceRoot = <Source folder path>
$TargetFolder = <Target folder path>
@(Get-ChildItem $SourceRoot -Recurse -File -Filter *.txt| Select -ExpandProperty Fullname) -like '*\eng*\*' |
foreach {Copy-Item $_ -Destination $TargetFolder}
答案 3 :(得分:0)
使用PowerShell做到这一点很好。尝试:
$dest = "C:\Users\username\Desktop\Final"
$source = "C:\Users\username\Desktop\Test1"
Get-ChildItem $source -filter "*.txt" -Recurse | Where-Object { $_.DirectoryName -match "eng"} | ForEach-Object { Copy-Item $_.fullname $dest }
答案 4 :(得分:0)
首先获取名称中包含eng
的所有文件夹的列表可能更容易。
$dest = "C:\Users\username\Desktop\Final"
$source = "C:\Users\username\Desktop\Test1"
$engFolders = Get-ChildItem $source -Directory -Recurse | Where { $_.BaseName -match "^eng" }
Foreach ($folder In $engFolders) {
Copy-Item ($folder.FullName + "\*.txt") $dest
}