【问题标题】:Substring Function don't work with a variable子字符串函数不适用于变量
【发布时间】:2018-11-16 22:51:00
【问题描述】:

我需要字符串的前 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] 确实 不包含名为“子字符串”的方法。在 Z:\skript\uebung1.ps1:16 字符:1 + $test.Substring(0,3) + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Substring:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound

错误的原因是什么?

【问题讨论】:

    标签: powershell directory substring get-childitem


    【解决方案1】:

    您的$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)
    

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

    【讨论】:

    • 感谢您的反馈。 $folder 输入错误。只有 $folderinput 是正确的。用例是:从 1(1 月)到 12(12 月)的子文件夹。
    • 感谢您的反馈。 $folder 输入错误。只有 $folderinput 是正确的。用例是:从 1(一月)到 12(十二月)命名的子文件夹。取决于我将文件保存到文件夹 1 或 2 或 3 等的月份。我的计划是将月份(1 到 12)作为字符串写入变量中。然后我选择路径 ""Z:\Home\Chronos\" 并添加月份(1 或 2 等)
    • 我不清楚我的代码建议是否解决或帮助解决了您的问题。此外,您问题中的代码 cmets 说第二个 sn-p 有效,但第一个无效。所以只有第一个 sn-p 抛出列出的错误?似乎他们都应该这样做,因为正如我所提到的,他们都非常相似。如果您使用这些额外的详细信息和变量更正更新问题,将会很有帮助。
    • 我理解你所说的,关于 FSO 而不是字符串。我只需要一个解决方案,用数字捕捉月份,然后我将其用作字符串。我试着串起来。但结果不是我想要的。 Get-Date with to string ("m") 不要给我当月的数字。
    • 我可以根据所提供的信息提供的唯一进一步建议是,如果$datum 包含DateTime(例如$datum = Get-Date$datum = [DateTime]::Today),那么$datum.Month 是访问月组件。但是,您没有显示$datum 的设置方式。我认为您确实需要在您的问题中提供Minimal, Complete, and Verifiable example,因为这里有太多的未知数,只能猜测。您在这些中描述的问题cmets 似乎也与问题中的不同。
    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多