子串功能不适用于变量

时间:2018-11-16 22:51:00

标签: powershell directory substring get-childitem

我需要字符串的前3个字节。我的代码出错。

# This Code don't work
$folderoutput="Z:\Home\Chronos\" + $datum.Month;
$test = Get-ChildItem -Path $folderinput| select name, state -last 1
$test.Substring(0,3)

# This Code work
$folderoutput="Z:\Home\Chronos\" + "11"
$test = Get-ChildItem -Path $folderinput| select name, state -last 1
$test.Substring(0,3)

错误:

  

方法调用失败,因为[Selected.System.IO.FileInfo]确实   不包含名为“ Substring”的方法。在Z:\ skript \ uebung1.ps1:16   字符数:1   + $ test.Substring(0,3)   + ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(Substring:String)[],RuntimeException       + FullyQualifiedErrorId:MethodNotFound

错误原因是什么?

1 个答案:

答案 0 :(得分:4)

您的$test变量不是引用String,而是引用由返回的FileInfo实例的NameState属性组成的对象。在这个组成的对象上没有Substring method(就此而言,在FileInfo上也没有),因此是错误。要获取文件名,您需要访问Name property,就像这样...

$test.Name.Substring(0, 3)

或者,如果您只想要Name属性(不确定State的来源),则可以使用-ExpandProperty parameter来仅检索一个值...

$test = Get-ChildItem -Path $folderinput| select -ExpandProperty name -last 1
$test.Substring(0, 3)

至于为什么一个代码片段有效而另一个代码片段无效,目前尚不清楚。两者之间的唯一区别是$folderoutput的值,未使用;在下一行中,您将$folderinput传递给Get-ChildItem。您确定$datum已设置并且具有Month属性吗?