Я пытаюсь скопировать файлы в новый каталог на основе их расширения и переименовывать дубликаты файлов, добавляя число к исходному имени файла.
Однако, когда я запускаю приведенный ниже скрипт (I 'мы включили весь сценарий, который выполняет другие действия, только для контекста), файлы, которые не дублируются, копируются дважды, а файлы, которые дублируются, копируются четыре раза.
Ex)
подпапка A содержит: aaa.doc, bbb.doc
подпапка B содержит: bbb.doc, ccc.doc
Я хочу, чтобы новый каталог имел: aaa.doc, bbb_1.doc, bbb_2.doc, ccc.doc
Однако я получаю: aaa.doc, aaa_1.doc, bbb.doc, bbb_1.doc, bbb_1_1.doc, bbb_2.doc, ccc.doc, ccc_1.doc
Похоже, мой скрипт обрабатывает все файлы дважды - почему он это делает и как я могу это исправить?
Мой сценарий (игнорировать первую часть):
New-Item -ItemType directory -Force -Path $PSScriptRoot\doc;
New-Item -ItemType directory -Force -Path $PSScriptRoot\txt;
New-Item -ItemType directory -Force -Path $PSScriptRoot\spreadsheet;
Get-ChildItem $PSScriptRoot -recurse | %{
if($_.Name -match "^*.`.gz$")
{
$parent="$(Split-Path $_.FullName -Parent)";
#write-host "Extracting $($_.FullName) to $parent"
$arguments=@("e", "`"$($_.FullName)`"", "-o`"$($parent)`"", "-y");
$ex = start-process -FilePath "`"C:\Program Files\7-Zip\7z.exe`"" -ArgumentList $arguments -wait -PassThru;
if( $ex.ExitCode -eq 0)
{
write-host "Extraction successful for $($_.FullName)"
add-content -value "Extraction successful for $($_.FullName)" -path $PSScriptRoot\log_other.txt
rmdir -Path $_.FullName -Force
}
}
У этого чанка есть проблемы:
ElseIf(($_.Name -match "^*.`.doc$") -or ($_.Name -match "^*.`.docx$"))
{
$nextName = "$(Join-Path -Path $PSScriptRoot\doc -ChildPath $_.Name)";
If(Test-Path -Path $nextName)
{
$num = 1;
while(Test-Path -Path $nextName)
{
$nextName = Join-Path $PSScriptRoot\doc ($_.BaseName + "_$num" + $_.Extension)
$num++
}
}
Else
{
New-Item -ItemType File -Path $nextName -Force
}
$_ | Copy-Item -Destination $nextName -Force
write-host "$($_.FullName) moved to doc folder"
add-content -value "$($_.FullName) moved to doc folder" -path $PSScriptRoot\log_other.txt
}
Конец проблемного чанка
ElseIf($_.Name -match "^*.`.txt$")
{
copy-item $_.FullName -destination $PSScriptRoot\txt
write-host "$($_.FullName) moved to txt folder"
add-content -value "$($_.FullName) moved to txt folder" -path $PSScriptRoot\log_other.txt
}
ElseIf(($_.Name -match "^*.`.xls$") -or ($_.Name -match "^*.`.xlsx$"))
{
copy-item $_.FullName -destination $PSScriptRoot\spreadsheet
write-host "$($_.FullName) moved to spreadsheet folder"
add-content -value "$($_.FullName) moved to spreadsheet folder" -path $PSScriptRoot\log_other.txt
}
}