我需要字符串的前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
错误原因是什么?
答案 0 :(得分:4)
您的$test
变量不是引用String
,而是引用由返回的FileInfo
实例的Name
和State
属性组成的对象。在这个组成的对象上没有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
属性吗?