Powershell:使用复制项目时尝试重命名重复的文件,但即使非重复项也被重命名

时间:2018-10-03 15:35:18

标签: powershell copy-item

我正在尝试根据文件扩展名将文件复制到新目录,并通过在原始文件名后附加数字来重命名重复的文件。

但是,当我在下面运行脚本时(出于上下文的考虑,我也包含了执行其他操作的整个脚本),将未复制的文件复制两次,将已复制的文件复制四次。


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
}

}

0 个答案:

没有答案