从具有相同名称的文件夹/子文件夹中移动文件夹和文件(副本将被重命名)

时间:2018-08-09 21:46:08

标签: powershell scripting directory rename

(我试图重写此内容以使其更加清晰)

我有一个数百个文件夹和文件(每个文件夹和文件以ABC开头,然后是数字001-936)的问题,需要将其移动到具有相同名称的单个文件夹中。例如:

C:\folders\ABC001 
C:\folders\random\ABC001\ 
C:\folders\files\ABC001.pdf 
C:\folders\ABC002.pdf 
C:\folders\ABC002\  
C:\folders\needs sorting\ABC002\

我想将所有文件和文件夹移动到同名文件夹:

C:\folders\ABC\ABC001\ 
C:\folders\ABC\ABC002\  
and so on...

但是,有时原始文件夹和/或文件在目标文件夹中会重复(或者可能已经存在,因为文件夹已经存在),因此我希望将其添加到名称(1),(2)等

C:\folders\ABC\ABC001\ABC001\
C:\folders\ABC\ABC001\ABC001 (1)\ 
C:\folders\ABC\ABC001\ABC001.pdf 
C:\folders\ABC\ABC002\ABC002.pdf 
C:\folders\ABC\ABC002\ABC002\  
C:\folders\ABC\ABC002\ABC002 (1)\

任何帮助将不胜感激,我已经尝试解决了好几个星期(每次我都需要这些文件),但是对于脚本/代码来说是新手。我开始:

for /R "C:\folders" %x in (*abc123*.*) do move "%x" "D:\folders\abc\abc123"

最近的尝试(对其他代码进行少量编辑):

function MoveFileToFolder ([string]$source,[string]$destination){
# get a list of source files
$files = Get-ChildItem -Path $source -Recurse | ?{($_.PSIsContainer)}
# verify if the list of source files is empty
if ($files -ne $null) {
    foreach ($file in $files) {
    $filename = $file.Name
    $filebase = $file.BaseName
    $fileext = $file.Extension
# verify if destination file exists
    $filenameNU = $filename 
    if (Test-Path (Join-Path $destination $filename)) {
        $n = 0
        while ((Test-Path (Join-Path $destination $filenameNU)) -eq $true)
        {
        $filenameNU = $filebase + "(" + ++$n + ")" + $fileext
        }
    }
    Move-Item $file.FullName (Join-Path $destination $filenameNU)
    }
}
}

MoveFileToFolder C:\folders\ C:\folders\abc\abc123

(我会尝试在Powershell中为每个子文件夹运行它,但是跟上它变得非常困难)

感谢您阅读。

0 个答案:

没有答案