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

PowerShell脚本Get-Content路径异常报错,如何排查修复?

修复PowerShell脚本中的路径错误:Cannot find path...

我一眼就看出问题出在你的Get-ScriptDirectory函数上——它最后错误地返回了$Invocation对象,而不是你前面逻辑计算出的脚本目录路径!

问题根源分析

当你执行$cwd = Get-ScriptDirectory时,你以为拿到的是字符串格式的路径,但实际上函数最后一行的return $Invocation覆盖了前面分支返回的路径值,导致$cwd变成了一个System.Management.Automation.InvocationInfo对象。当Join-Path尝试把这个对象和文件名拼接时,PowerShell会自动将对象转换为它的类型名字符串,这就出现了错误信息里的奇怪路径:H:\System.Management.Automation.InvocationInfo\before.txt。

修复后的脚本函数

只需要删掉函数里多余的return $Invocation即可,让函数返回前面分支计算出的正确路径:

function Get-ScriptDirectory { 
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value; 
    if($Invocation.PSScriptRoot) { 
        $Invocation.PSScriptRoot; 
    } Elseif($Invocation.MyCommand.Path) { 
        Split-Path $Invocation.MyCommand.Path 
    } else { 
        $Invocation.InvocationName.Substring(0,$Invocation.InvocationName.LastIndexOf("\")); 
    } 
    # 移除多余的return $Invocation,让函数返回路径字符串
} 

修复后你可以先单独运行Get-ScriptDirectory验证,它应该返回C:\Users\me\Documents\subdir这样的字符串路径,而非对象。此时Join-Path就能正确生成before.txt的完整路径,Get-Content也就不会报错了。

后续:子目录文件列表写入HTML的思路

完成路径修复后,你可以用Get-ChildItem遍历子目录文件,生成对应的HTML元素并追加到目标文件中,示例代码如下:

# 遍历子目录下的所有文件,生成HTML列表项
$fileListHtml = Get-ChildItem -Path $cwd -Recurse -File | ForEach-Object {
    # 生成带链接的列表项,可根据需求调整格式
    "<li><a href='$($_.FullName)'>$($_.Name)</a></li>"
}

# 将文件列表追加到HTML文件中
Add-Content -Path $filenamePathOut -Value "<h3>子目录文件列表</h3><ul>$($fileListHtml -join '')</ul>"

# 最后追加after.txt的内容
Get-Content -Path (Join-Path $cwd $filenameAfter) | Add-Content -Path $filenamePathOut

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:39:14