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

PowerShell获取用户输入文件夹路径出现Set-Location类型转换报错如何解决

问题根因

报错的核心是变量$Source_UIP的赋值逻辑错误:
你用Get-ChildItem包裹了用户输入的路径,Get-ChildItem会返回指定路径下所有子项组成的对象数组,而cd(即Set-Location)的Path参数仅接收字符串类型的路径值,类型不匹配触发报错。

原有代码的问题点

  • 不需要对Read-Host返回的路径字符串套Get-ChildItem,你需要存储的是用户输入的路径本身,不是路径下的子项列表
  • 缺少路径合法性校验,无法过滤用户输入文件路径、不存在路径的异常场景
  • 无需切换工作目录(即不需要执行cd命令),直接把路径传给Get-ChildItem即可,避免切换目录带来的潜在异常,获取文件的逻辑也可简化,直接用Get-ChildItem的-File参数筛选文件,无需额外判断PsIsContainer属性

修复后可正常运行的完整脚本

脚本增加了路径校验逻辑,会自动校验用户输入的是否为合法文件夹路径,输入不合法时直接抛出错误终止运行:

$Date_Time = Get-Date -Format "yyyyMMdd_HH_mm"

$ErrorActionPreference = 'Stop'

[ValidateScript({
if(-not (Test-Path -Path $_ -PathType Container))
{
    throw '路径不合法,请输入有效的文件夹路径'
}

$true
})]
$Source_UIP = Read-Host -Prompt '请输入源文件所在的文件夹路径'

[ValidateScript({
if(-not (Test-Path -Path $_ -PathType Container))
{
    throw '路径不合法,请输入有效的文件夹路径'
}

$true
})]
$Extracetd_UIP = Read-Host -Prompt '请输入目标文件所在的文件夹路径'

# 生成哈希值
$Hash_Src = Get-ChildItem $Source_UIP -Recurse -File | Get-FileHash -Algorithm SHA256
$Hash_Extr = Get-ChildItem $Extracetd_UIP -Recurse -File | Get-FileHash -Algorithm SHA256

# 哈希对比并输出结果
$Compare = Compare-Object -ReferenceObject $Hash_Src -DifferenceObject $Hash_Extr -Property hash -IncludeEqual -PassThru | Format-List
$Compare | Out-File -FilePath "C:\Users\USER1\Desktop\test\Destination\Hash_Result-$Date_Time.txt"
Invoke-Item -Path "C:\Users\USER1\Desktop\test\Destination\Hash_Result-$Date_Time.txt"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:03