我正在编写一个预定的脚本,将图像(jpg)从一个位置移动到另一个位置。 问题是父目录在名称中是可变的,而结束目录是固定的。
如果robocopy会这样做,我会很高兴:robocopy C:\ temp \ pcbmodel ** \ defect c:\ test ** \ defect *。但它没有
例如,这几乎可以工作:
foreach ($i in Get-ChildItem C:\temp\pcbmodel\*\*\defect -recurse)
{
if ($i.CreationTime -lt ($(Get-Date).AddMonths(0)))
{
write $i.FullName
Copy-Item $i.FullName C:\Test
}
}
问题是文件是在c:\ test中复制的,但**路径不是。我需要的*路径因为每个客户都会改变。
一些建议会很好, 伯特
答案 0 :(得分:2)
这应该让您走上正确的道路,获得有效的解决方案。重要的部分是Resolve-Path cmdlet,它采用-Relative参数:http://technet.microsoft.com/en-us/library/hh849858.aspx。 new-Item -Force只是告诉它在需要时创建一个文件夹结构。
# $OldRoot = 'Top-level of old files'
# $DestRoot = 'Top-level of destination'
# Go to old root so relative paths are correct
Set-Location $OldRoot
# Get all the images, then for each one...
Get-ChildItem -Recurse -Include "*.jpeg", "*.jpg" |
ForEach-Object {
# Save full name to avoid issues later
$Source = $_.FullName
# Construct destination filename using relative path and destination root
$Destination = '{0}\{1}' -f $DestRoot, (Resolve-Path -Relative -Path:$Source).TrimStart('.\')
# If new destination doesn't exist, create it
If(-Not (Test-Path ($DestDir = Split-Path -Parent -Path:$Destination))) {
New-Item -Type:Directory -Path:$DestDir -Force -Verbose
}
# Copy old item to new destination
Copy-Item -Path:$Source -Destination:$Destination -Verbose
}
答案 1 :(得分:0)
这样的事情怎么样:
$step1 = get-childitem C:\temp\pcbmodel\
$Else = #FILETYPE YOU DO NOT WANT
$step1 | foreach {get-childitem -recurse -exclude "Directories", $ELSE | where {$_.Creationtime -lt ($(get-date).Addmonths(0))}
}
希望我做对了,这有助于:)
编辑:使用 -Exclude 和 -Include 参数,他们帮助很多:)
EDIT2:Ofc,我重读了一些内容,对于许多编辑感到抱歉 - 你只是在寻找jpg文件。
$step1 | foreach {get-childitem -recurse -include *.jpg, *.jpeg | where {$_.Creationtime -lt ($(get-date).Addmonths(0))}
答案 2 :(得分:0)
另一个想法: 不要在 C:磁盘上试用它。它将永远需要。但是,如果你对某个路径中的每个目录和子目录都有权限,并且子目录数量不是很大,那么它应该可以工作。
我在C:上创建了一个目录“New Directory”,并在此目录中创建了另一个“New Directory”。和ofc,目录中的另一个“新目录”。最后我创建了一个名为“superduper.txt”的文件 - > C:\ New Directory \ New Directory \ New Directory \ superduper.txt
(get-childitem C:\).FullName | where {(Get-ChildItem $_).FullName | where {(get-childitem $_ -Recurse).FullName -match "superduper"}}
结果:
C:\New Directory
我认为它不会很快,你需要其中两个来实现你的目标,我想它应该有效。
答案 3 :(得分:0)
我正在尝试将所有子文件夹及其文件从一个文件夹复制到另一个文件夹,而不复制其父文件夹。
例如,在包含文件的某些子文件夹的C:\test
中,请复制到D:\test
,而不是D:\test\test\subfolders
。