我想将位于 C 盘用户文件夹下的文件夹移至 D 盘以释放空间。该文件夹以我的名字命名,其中包含图片、下载、文档、桌面、视频等内容。那么这样做安全吗?
操作系统:Windows 10 64位
答案1
一种方法是使用符号链接。
假设您的用户名是 Rob,并且您想将图片移至驱动器 D。
进入命令行
输入
mklink /D c:\users\Rob\newpictures d:\Rob\pictures
这将在驱动器 C 上创建指向驱动器 D 上的文件夹的新链接。
前往 D 盘并创建文件夹抢进而Rob\图片
在 D:\Rob\pictures 中创建一个文件(任意文件)
检查c:\用户\Rob\newpictures,您就可以看到这个新文件。
如果可以,那么到目前为止该过程是正确的。
将所有文件从c:\用户\Rob\图片到d:\Rob\pictures。
删除c:\用户\Rob\图片。如果不允许,则只需重命名图片到老照片。
重命名为c:\用户\Rob\newpictures到c:\用户\Rob\图片
我没有用它来移动用户下的文件,但是它对我的其他文件夹有用。
答案2
# 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 "-------------------------------"
}
}