|
PowerShell 脚本,该脚本首先计算 Documents 文件夹的大小,如果大小超过 1GB,则使用 robocopy 命令将其迁移到新位置,可以按照以下步骤进行:
脚本概述
获取文件夹大小:计算 Documents 文件夹的总大小。
判断大小:如果 Documents 文件夹的大小超过 1GB,则执行迁移操作。
迁移文件夹:使用 robocopy 命令将文件夹内容迁移到新的位置。
PowerShell 脚本
powershell
# 获取当前用户名
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.Split("\")[1]
# 定义 Documents 文件夹的路径
$documentsPath = "C:\Users\$userName\Documents"
# 获取文件夹大小
$folderSize = 0
Get-ChildItem -Path $documentsPath -Recurse | ForEach-Object {
# 如果是文件,累加文件大小
if ($_ -is [System.IO.FileInfo]) {
$folderSize += $_.Length
}
}
# 转换文件夹大小为 GB
$folderSizeGB = [math]::Round($folderSize / 1GB, 2)
# 输出文件夹大小
Write-Host "Documents 文件夹的大小为:$folderSizeGB GB"
# 如果文件夹大小超过 1GB,则使用 robocopy 迁移文件夹
if ($folderSizeGB -gt 1) {
# 定义新的目标位置
$newLocation = "D:\Documents"
# 如果目标文件夹不存在,则创建它
if (-Not (Test-Path -Path $newLocation)) {
New-Item -ItemType Directory -Path $newLocation
}
# 使用 robocopy 迁移文件夹内容
Write-Host "迁移 Documents 文件夹到新位置:$newLocation"
robocopy $documentsPath $newLocation /E /Z /COPYALL /R:3 /W:5
# 移动文件夹成功后,删除源文件夹(可选)
# Remove-Item -Path $documentsPath -Recurse -Force
# 更新注册表,修改默认文件夹位置
$regKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
Set-ItemProperty -Path $regKey -Name "Personal" -Value "$newLocation"
# 可选:重新启动资源管理器,使更改生效
Stop-Process -Name explorer
Start-Process explorer
} else {
Write-Host "Documents 文件夹的大小没有超过 1GB,跳过迁移。"
}
详细步骤
获取当前用户名:我们使用 [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.Split("\")[1] 获取当前用户的用户名。
计算文件夹大小:
使用 Get-ChildItem -Recurse 遍历 Documents 文件夹中的所有文件。
累加每个文件的大小,最终得出文件夹总大小。
将文件大小从字节转换为 GB(使用 1GB = 1,073,741,824 字节)。
判断文件夹大小:如果文件夹大小大于 1GB,脚本继续执行迁移。
使用 robocopy 迁移文件夹:
robocopy 是一个高效的文件复制工具,它支持断点续传、复制文件属性等。这里使用 /E 选项递归复制所有子文件夹,/Z 启用可恢复模式,/COPYALL 复制所有文件属性,/R:3 重试次数为 3,/W:5 每次重试等待 5 秒。
更新注册表:
通过修改注册表的 User Shell Folders 键,更新 Documents 文件夹的新路径。这一步是为了让 Windows 知道新文件夹位置。
重新启动资源管理器:为确保路径更新生效,我们重启 Windows 资源管理器。
其他说明
robocopy 参数:
/E: 复制子目录(包括空目录)。
/Z: 启用可恢复模式(断点续传)。
/COPYALL: 复制所有文件属性(包括时间戳、权限等)。
/R:3: 重试 3 次(如果复制过程中发生错误)。
/W:5: 每次重试等待 5 秒。
删除源文件夹(可选):在迁移完成后,您可以选择删除源文件夹。取消注释 Remove-Item -Path $documentsPath -Recurse -Force 即可启用此功能。
示例输出
plaintext
Documents 文件夹的大小为:1.25 GB
迁移 Documents 文件夹到新位置:D:\Documents
注意事项
管理员权限:如果要修改注册表或移动系统文件夹,确保以管理员权限运行 PowerShell。
目标路径:确保目标驱动器(例如 D 盘)有足够的空间来存放移动的文件。
数据安全:在执行任何文件操作前,建议先备份数据,避免丢失重要文件。 |
|