我正在尝试根据文件扩展名将文件复制到新目录,并通过在原始文件名后附加数字来重命名重复的文件。
但是,当我在下面运行脚本时(出于上下文的考虑,我也包含了执行其他操作的整个脚本),将未复制的文件复制两次,将已复制的文件复制四次。
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
}
}