我要检查第二个文件夹中的.jpg文件。第二个文件夹有一些子文件夹。 如果.jpg位于第二个文件夹的子文件夹中,我将复制第一个文件夹中的文件 根据基本名称转到第二个文件夹的子文件夹。 我尝试了这段代码,可以检查.jpg的存在,然后将文件匹配到第一个文件夹文件。 我的问题是,如果.jpg文件大于1,我将无法复制,并且在复制文件时,我无法指定应复制的子文件夹。
我尝试过:
$JobInit = "D:\Initial"
$JobError = "D:\Process"
if (Test-Path -Path "$JobError\*\*.jpg") {
Write-Host "Error Exist"
$L_Name = "15"
$ErrorFile = Get-ChildItem -Path "$JobError\*\*.jpg" |
ForEach-Object { $_.BaseName.Substring($L_Name) }
$Path_ = Get-ChildItem -Path "$JobError\*\*.jpg"
$Split = Split-Path -Path $Path_
$NewJob = @(Get-ChildItem -Path "$JobInit\*.png" -File -Recurse |
Where-Object { "$ErrorFile" -contains $_.BaseName })
Write-Host $NewJob
$Timestamp = Get-Date -Format yyyyMMddhhmmss
$CopyJob = Copy-Item $NewJob -Destination "$Split"
$Rename = Get-ChildItem "$Split\*.png" |
Rename-Item -NewName {"$Timestamp`_" + $_.Name.Replace('.png','.gif')}
}
答案 0 :(得分:1)
假设我正确理解了您的问题,并且如果它们在“初始”文件夹中具有相应的PNG文件,则希望替换“过程”文件夹中的现有JPEG文件,以下方法可以解决问题:
$L_Name = 15
Get-ChildItem -Path "$JobError\*\*.jpg" | ForEach-Object {
$basename = $_.BaseName.Substring($L_Name)
$png = "$JobInit\${basename}.png"
if (Test-Path $png) {
$timestamp = Get-Date -Format 'yyyyMMddhhmmss'
$dst = Join-Path $_.DirectoryName "${timestamp}_${basename}.jpg"
Copy-Item $png $dst -Force
}
}