Posted On June 25, 2021

How To Copy Folder in Legacy Windows with Long File Names?

kimconnect 0 comments
blog.KimConnect.com >> Codes >> How To Copy Folder in Legacy Windows with Long File Names?
$sourceDirectory='D:\SMBSHARE\LONGPATH'
$destinationDirectory='\\FILESERVER\LONGPATH'

function copyFolderWithLongNames($sourceDirectory,$destinationDirectory){
    $sourceParent=split-path $sourceDirectory -parent
    $sourceChild=split-path $sourceDirectory -leaf
    $destinationParent=split-path $destinationDirectory -parent
    $destinationChild=split-path $destinationDirectory -leaf
    $maxFolderLength=248
    if($sourceParent.length -le $maxFolderLength -and $destinationParent.length -le $maxFolderLength){
        $sourceJunction='C:\Source'
        $destinationJunction='C:\Destination'
        cmd /c mklink /J $sourceJunction $sourceParent # Local volumes are required as Source Directory
        cmd /c mklink /D $destinationJunction $destinationParent
        cmd /c robocopy "$sourceJunction\$sourceChild" "$destinationJunction\$destinationChild" /copyall /E /R:0 /Z /NP
        [io.directory]::Delete($sourceJunction)
        [io.directory]::Delete($destinationJunction)
    }
    # Other methods that could also work
    #robocopy "\\?$sourceDirectory" "\\?$destinationDirectory"
    # OR
    #Subst X: $sourceDirectory
    #Subst Y: $destinationDirectory
    #robocopy X:\ Y:\ /copyall /E /R:0 /Z /NP
    #subst X: /d
    #subst Y: /d
}

copyFolderWithLongNames $sourceDirectory $destinationDirectory

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

PowerShell: Windows Session Memory Usage Watcher

# windowsSessionWatcher.ps1 $serverNames=@( 'IRV-RDS01.domain1.net', 'LAX-RDS02.domain2.com ) $thresholdMemoryUsagePercent=30 $thresholdMemoryGb=20 $domainCreds=@( @{domain='domain1.ad';username='domain1\sysadmin';password=$env:pass1} @{domain='domain2.com';username='domain2\sysadmin';password=$env:pass2} ) # Email relay…

PowerShell: Increase CPU Count or Memory of VMs via Virtual Machine Manager

# IncreaseCpuandRamViaVMM.ps1 # User Input Variables $vmNames=@( 'TESTWINDOWS', 'TESTWINDOWS2' ) $vmmServer=$env:computername $setCpuCount=8 $setDynamicMemory=$false $dynamicMemoryMinimumGB='2GB' $dynamicMemoryMaximumGB='16GB'…

PowerShell: Check DotNet Framework on Windows

function checkDotNetVersions{ # General info: # - Powershell 2.0 latest SSL version support is TLS…
Other project: DragonCoin.com