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
相关产品推荐
相关产品推荐

