PowerShell中Move-Item遇文件已存在时重命名的实现方法
解决方案
可以通过预先检查目标路径的文件是否存在,自动生成带递增后缀的文件名来解决这个问题,以下是实现代码:
foreach ($sourcePath in $dateipfad) { # 拆分源文件的文件名与扩展名 $fileName = [System.IO.Path]::GetFileNameWithoutExtension($sourcePath) $fileExt = [System.IO.Path]::GetExtension($sourcePath) # 初始化目标路径 $targetPath = Join-Path -Path $geloescht -ChildPath "$fileName$fileExt" # 循环检查目标路径,生成唯一文件名 $counter = 1 while (Test-Path -Path $targetPath) { $targetPath = Join-Path -Path $geloescht -ChildPath "$fileName-$counter$fileExt" $counter++ } # 执行文件移动 Move-Item -Path $sourcePath -Destination $targetPath -ErrorAction Stop }
代码说明
- 使用
.NET的[System.IO.Path]类拆分文件名和扩展名,便于后续拼接带后缀的新名称 - 通过
while循环+Test-Path检测目标路径是否存在重复文件,若存在则自动递增计数器,生成如文件名-1.pdf、文件名-2.pdf的唯一路径 - 最终用生成的唯一路径执行移动操作,避免因文件重复抛出错误
适配原脚本的修改
如果你的$dateipfad是包含dateipfad属性的对象集合,只需将代码中的$sourcePath替换为$i.dateipfad即可,核心逻辑保持不变。
内容的提问来源于stack exchange,提问作者BM-SMS
相关产品推荐
相关产品推荐

