批量移动文件和文件夹(包括结构)

批量移动文件和文件夹(包括结构)

编写了一个批处理文件,该文件原本应该将文件夹和文件结构从每个驱动器上的一个父目录移动到另一个父目录,同时合并所有现有文件夹,但发现 MOVE 命令无法合并。无法使用 Xcopy 或 Robocopy,因为它们会将源复制到目标,然后删除源。要移动的文件/文件夹非常大,因此需要寻找一种可以移动而不是复制/删除的解决方案...我到目前为止编写的代码如下。目前,它将移动不需要合并的文件/文件夹,然后使用 robocopy 完成其余操作,但仍需要超过 24 小时,而每个驱动器的手动 CTRL+X 和 CTRL+V 是即时的...有人可以帮忙吗?

@echo off
REM Last Edited 12/19/21 2:48PM
REM Enter Old Camera Name, New Camera Name
setlocal enableDelayedExpansion
set OldCamName=%~1
set NewCamName=%~2

REM Determine Camera Physical ID from Camera Name


for /F "skip=1" %%F in ('wmic LogicalDisk WHERE DriveType^=3 GET DeviceID') do (
    echo Moving Low Quality on drive %%F%...    
    set oldDirectory="%%F%\DW Spectrum Media\low_quality\!OldCamName!"
    set newDirectory=%%F%\DW Spectrum Media\low_quality\!NewCamName!
    FOR /d %%i IN (!oldDirectory!\*) DO (
        move /Y "%%i" "!newDirectory!"
        robocopy "%%i" "!newDirectory!\%%~ni" /E /J /MOVE /NJH /NJS
    )
    echo Moving High Quality on drive %%F%...
    set oldDirectory="%%F%\DW Spectrum Media\hi_quality\!OldCamName!"
    set newDirectory=%%F%\DW Spectrum Media\hi_quality\!NewCamName!
    FOR /d %%i IN (!oldDirectory!\*) DO (
        move /Y "%%i" "!newDirectory!"
        robocopy "%%i" "!newDirectory!\%%~ni" /E /J /MOVE /NJH /NJS
    )
)

答案1

如果你可以使用电源外壳,这将大大简化事情。Move-ItemCmdlet 就是您所需要的。

Move-Item cmdlet 将一个项目(包括其属性、内容和子项目)从一个位置移动到另一个位置。... 当您移动某个项目时,它会被添加到新位置并从原始位置删除。

$PathFormat = '{0}:\DW Spectrum Media\{1}\{2}'
$Qualifiers = @( 'low_quality' , 'hi_quality' )

$OldCamName = Read-Host 'Old Camera Name'
$NewCamName = Read-Host 'New Camera Name'

ForEach ( $DriveLetter in (( Get-Volume | Where DriveType -eq 'Fixed' ).DriveLetter -ne $Null ))
{
    $Qualifiers | ForEach{
        $Splat = @{
            'Path'         = ( $PathFormat -f $DriveLetter , $_ , $OldCamName ) + '\*'
            'Destination'  = $PathFormat -f $DriveLetter , $_ , $NewCamName
        }
        ###   Create destination directory if it doesn't exist
        If ( ! (Test-Path $Splat.Dest) ) { mkdir $Splat.Dest }
        Move-Item @Splat  #Boom! :D
    }
}

相关内容