Функция подстроки не работает с переменной - PullRequest
0 голосов
/ 17 ноября 2018

Мне нужны первые 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: (Подстрока: String) [], RuntimeException + FullyQualifiedErrorId: MethodNotFound

В чем причина ошибки?

1 Ответ

0 голосов
/ 17 ноября 2018

Ваша переменная $test ссылается не на String, а на объект, состоящий из свойств Name и State возвращенного экземпляра FileInfo.Нет Substring метода на этом составленном объекте (ни на FileInfo, в этом отношении), отсюда и ошибка.Чтобы получить имя файла, вам нужно получить доступ к свойству Name , например так ...

$test.Name.Substring(0, 3)

В качестве альтернативы, если вы хотите только свойство Name (неконечно, откуда взято State) вы можете использовать параметр -ExpandProperty , чтобы получить только это одно значение ...

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

Что касается того, почему один фрагмент работает, а другой - нетнеясно.Единственная разница между ними - это значение $folderoutput, которое не используется;в следующей строке вы передаете $folderinput на Get-ChildItem.Вы уверены, что $datum установлено и имеет свойство Month?

...