把C盘Users文件夹下的文件移动到D盘

把C盘Users文件夹下的文件移动到D盘

我想将位于 C 盘用户文件夹下的文件夹移至 D 盘以释放空间。该文件夹以我的名字命名,其中包含图片、下载、文档、桌面、视频等内容。那么这样做安全吗?

操作系统:Windows 10 64位

答案1

一种方法是使用符号链接

假设您的用户名是 Rob,并且您想将图片移至驱动器 D。

  1. 进入命令行

  2. 输入mklink /D c:\users\Rob\newpictures d:\Rob\pictures

    这将在驱动器 C 上创建指向驱动器 D 上的文件夹的新链接。

  3. 前往 D 盘并创建文件夹进而Rob\图片

  4. 在 D:\Rob\pictures 中创建一个文件(任意文件)

  5. 检查c:\用户\Rob\newpictures,您就可以看到这个新文件。

    如果可以,那么到目前为止该过程是正确的。

  6. 将所有文件从c:\用户\Rob\图片d:\Rob\pictures

  7. 删除c:\用户\Rob\图片。如果不允许,则只需重命名图片老照片

  8. 重命名为c:\用户\Rob\newpicturesc:\用户\Rob\图片

我没有用它来移动用户下的文件,但是它对我的其他文件夹有用。

答案2

请参阅本文Powershell – 移动配置文件夹的脚本


# This command has 2 non-mandatory parametrs
# Parameter 1: User-Account -> f.e "user1"
# Parameter 2: New profiles path -> f.e "D:\USER_PROFILES" (default value is "D:\users")
#
# Execution examples
#
# PS> .\MOVE_PROFILES.ps1 (moves all user profiles to the new location D:\users\<user>"
# PS> .\MOVE_PROFILES.ps1 user1 (moves user1 profile to the new location D:\users\<user>"
# PS> .\MOVE_PROFILES.ps1 user1 G:\folder (moves user1 profile to the new location G:\FOLDER\<user>"
# PS> .\MOVE_PROFILES.ps1 ALL G:\folder (moves all user profiles to the new location G:\FOLDER\<user>"
#
# Execute it as administrator when the user you want to migrate is not logged!!


Param(
  [string] $ACCOUNT = "ALL",
  [string] $NEWPATH = "D:\users"
)

# Obtain all user profiles (excluding system profiles)
$USER_PROFILES = dir -LiteralPath "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | ? {$_.name -match "S-1-5-21-"} 
 
# Loop to process all profiles
foreach ($USER_PROFILE in $USER_PROFILES) {

    # Obtain registry, profile path, user and profile new path
    $REGISTRY = $($($USER_PROFILE.pspath.tostring().split("::") | Select-Object -Last 1).Replace("HKEY_LOCAL_MACHINE","HKLM:"))
    $OLD_PROFILEPATH = $(Get-ItemProperty -LiteralPath $REGISTRY -name ProfileImagePath).ProfileImagePath.tostring()
    $USER=$OLD_PROFILEPATH.Split("\")[-1]
    $NEW_PROFILEPATH = "$NEWPATH\$USER"
    
    # Process all or the user passed as parameter?
    If ($ACCOUNT -eq "ALL" -or $USER -eq $ACCOUNT)
    {
        Write-Host "User:       $USER"
        Write-Host "Registry:   $REGISTRY"
        Write-Host "Old path:   $OLD_PROFILEPATH"
        Write-Host "New path:   $NEW_PROFILEPATH"
        Write-Host

        # Change the profile path in the registry
        Set-ItemProperty -LiteralPath $REGISTRY -Name ProfileImagePath -Value $NEW_PROFILEPATH
        Write-Host "- Modified Windows registry (ProfileImagePath)"
        Write-Host "- Moving folders to new location ($NEW_PROFILEPATH)..."

        # Move the profile folders to the new location
        $ROBOCOPY_COMMAND = "robocopy /e /MOVE /copyall /r:0 /mt:4 /b /nfl /xj /xjd /xjf $OLD_PROFILEPATH $NEW_PROFILEPATH > robocopy_$USER.log"
        Invoke-Expression $ROBOCOPY_COMMAND
        Write-Host "- Done!"
        Write-Host "-------------------------------"        
    }
} 

相关内容