移动与改名
Move-Item 移动文件或目录的位置,Rename-Item 只改名字不改变位置。两者容易混:给目录改名应使用 Rename-Item,把新名字写成 Move-Item 的目标路径往往会报路径不存在。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 |
|---|---|
| 语法 | Move-Item 源 目标;Rename-Item 路径 新名 |
| 批量改名 | Get-ChildItem | Rename-Item -NewName 脚本块,脚本块里用 $_ 引用原对象 |
| 跨卷行为 | 跨卷移动本质是复制加删除,耗时长且存在中断风险 |
| 覆盖限制 | 目标已存在同名文件会报错,不会自动覆盖 |
| 属性保留 | 同一卷内移动通常保留权限与时间戳 |
典型使用场景
- 整理文件到归档目录,按类型或日期分门别类
- 批量改名:统一后缀、加日期前缀、清理多余字符
- 把日志从临时目录挪到长期保留目录
- 迁移单个配置文件到指定位置
- 用 -WhatIf 预演批量改名,确认规则后再真正执行
常用示例
常用示例
# 移动文件到目录
Move-Item D:\old\app.log D:\new\
# 改名:只改最后一段名称
Rename-Item D:\data\app.log app-2026.log
# 批量改名:把 .log 换成 .txt
Get-ChildItem *.log | Rename-Item -NewName { $_.Name -replace 'log$','txt' }
# 预演批量改名,确认规则无误
Get-ChildItem *.log | Rename-Item -NewName { $_.Name -replace 'log$','txt' } -WhatIf
# 移动整个目录
Move-Item D:\data\2025 D:\archive\2025常见场景与写法
| 需求 | 写法 | 注意 |
|---|---|---|
| 移动文件 | Move-Item 源 目标 | 目标目录需要已存在 |
| 改名 | Rename-Item 路径 新名 | 新名只写名称,不含路径 |
| 批量改名 | 管道加 -NewName 脚本块 | 先用 -WhatIf 预演 |
| 覆盖已有文件 | 先删除或改名目标 | 默认不会自动覆盖 |
| 跨卷移动 | 本质是复制加删除 | 大文件耗时长,注意中断风险 |
-NewName 传入脚本块时可以用 $_ 引用原对象,按规则批量改名,例如统一加前缀、替换字符或按日期重命名。
移动单个文件到目录时,目标最好写成目录路径并以反斜杠结尾;若被理解成新文件名,结果就是改名而不是移动。
批量操作前先把目标列表导出或打印一遍,确认数量与名称符合预期;迁移类任务结束后再对比文件数量,是成本很低的一道保险。