PowerShell中if条件后变量属性未正常传递问题求助
PowerShell字符串插值错误分析与修正
问题原因
你在双引号字符串中直接写$txtfiles.FullName时,PowerShell的字符串插值规则只会解析$txtfiles这个变量本身——当$txtfiles是多个文件对象的集合时,它会调用对象的ToString()方法,输出文件名的拼接(比如GPOList.txt test.txt),而.FullName会被当成普通文本直接追加在后面,这就是为什么你得到了GPOList.txt test.txt.FullName的错误结果。
修正方法
要在双引号里正确访问对象的属性,必须用**子表达式$()**包裹属性访问语句,让PowerShell先执行括号里的代码,再把结果插入字符串。
正确命令写法
$txtfiles = gci "C:\temp" -filter *.txt ; if ($txtfiles) {"blah`n$($txtfiles.FullName)"}
执行结果
blah C:\temp\GPOList.txt C:\temp\test.txt
另一种更易读的写法(推荐)
如果需要更清晰的格式,也可以拆分语句:
$txtfiles = Get-ChildItem "C:\temp" -Filter *.txt if ($txtfiles) { Write-Host "blah" $txtfiles.FullName }
这种写法会直接输出每个文件的完整路径,和你最初的执行结果完全一致。
内容的提问来源于stack exchange,提问作者RobiRobs
相关产品推荐
相关产品推荐

