You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell字符串变量拼接异常:文件名未追加至归档路径问题

PowerShell路径拼接问题:文件名未追加到归档路径的原因与解决

问题描述

我编写了如下PowerShell脚本:

$Folder = Get-Location
$FileName = Get-Item *.csv | Select-Object Name
$FullPath = Get-Item *.csv | Select-Object FullName
$Archive = $Folder, "Archive" -join '\'
$FileArchive = $Archive, $FileName -join '\'

执行后输出如下:

Path
C:\Test

Name : Orders_1408230845.csv

FullName : C:\Test\Orders_1408230845.csv

C:\Test\Archive
C:\Test\Archive\

预期$FileArchive的结果为C:\Test\Archive\Orders_1408230845.csv,但实际仅输出C:\Test\Archive\,未包含文件名。尝试使用+运算符或Concat方法拼接也无效,请问为何文件名未追加到归档路径中?

原因分析

核心问题在于$FileName的类型:用Select-Object Name得到的不是纯字符串,而是一个包含Name属性的自定义对象。当这个对象参与字符串拼接时,PowerShell默认的字符串转换逻辑无法提取出Name属性的实际值,导致拼接时相当于传入了空值,最终只得到归档路径部分。

解决方法

  • 方法1:展开属性获取字符串值
    使用Select-Object -ExpandProperty Name直接提取Name属性的字符串内容:

    $FileName = Get-Item *.csv | Select-Object -ExpandProperty Name
    
  • 方法2:直接访问对象属性
    通过.运算符直接获取文件对象的Name属性:

    $FileName = (Get-Item *.csv).Name
    
  • 方法3:用ForEach-Object提取属性
    通过管道遍历文件对象并提取Name:

    $FileName = Get-Item *.csv | ForEach-Object { $_.Name }
    
  • 更可靠的路径拼接方式
    推荐使用PowerShell内置的Join-Path cmdlet,它会自动处理路径分隔符的添加/合并问题,避免手动拼接的潜在错误:

    $Folder = Get-Location
    $FileName = (Get-Item *.csv).Name
    $Archive = Join-Path -Path $Folder -ChildPath "Archive"
    $FileArchive = Join-Path -Path $Archive -ChildPath $FileName
    

内容的提问来源于stack exchange,提问作者Juerg Meister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:01:16