Я хотел бы установить подсчитанное значение (количество файлов XML в папке) для переменной.

Set-variable (Get-ChildItem $filepath|where{$_.Extension -eq ".xls"}|Measure-Object).Count -Value $NumberOfCabinets

После этого моя переменная с именем NumberOfCabinets каждый раз дает мне значение 0.

Как изменить команду для сохранения правильного значения в переменной?

1 ответ1

0

Как упомянуто SimonS в комментариях, вам нужно выбрать, какое выражение является -Name а какое -Value . В настоящее время ваше выражение для получения числа файлов XLS неявно является параметром -Name для Set-Variable то есть именем переменной, которую нужно установить, а содержимое $NumberOfCabinets является данными для этой переменной. Поскольку $NumberOfCabinets еще не был установлен, новой переменной присваивается значение null. Например, если бы было пять файлов XLS, была бы создана переменная с именем $5 было бы присвоено значение null, поскольку в выражении count указано имя переменной.

Обычно Set-Variable требуется только в том случае, если вам нужно динамически выбирать, какую переменную устанавливать. Если вы все равно хотите его использовать, ваша команда будет выглядеть так:

Set-Variable 'NumberOfCabinets' (Get-ChildItem $filepath | where {$_.Extension -eq ".xls"} | Measure-Object).Count

Обратите внимание, что имя переменной, которую нужно установить / создать, просто передается в виде строки.

Однако, вероятно, проще установить переменную, используя стандартный оператор присваивания:

$NumberOfCabinets = (Get-ChildItem $filepath | where {$_.Extension -eq ".xls"} | Measure-Object).Count

Используя некоторые псевдонимы и тот факт, что коллекции PowerShell уже имеют свойство Count , мы можем даже немного его сжать:

$NumberOfCabinets = (gci $filepath | ? { $_.Extension -eq '.xls' }).Count

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .