Если маркер интереса - 161-е слово в файле , используйте следующий подход, при котором разбивает файл на слова независимо от переносов строк [1] :
$pass = (-split (Get-Content -Raw Word_File.txt))[160]
Добавить .ToLower()
, если вы хотите преобразовать токен в строчные буквы.
Обратите внимание, что вышезагружает весь файл в память как одну строку, используя -Raw
.
Поскольку индексы массива основаны на 0
, индекс [160]
возвращает 161-й элемент.
Унарная форма оператора -split
разбивает входные данные в массив токенов по пробелам .
- Примечание. Если вы хотите разделить по более строгому определению, что составляет слово в контексте регулярного выражения, используйте вместо этого следующее:
$pass = ((Get-Content -Raw Word_File.txt) -split '\W+' -ne '')[160]
[1] Если ваш входной файл содержит каждое слово в отдельной строке :
Ваше решение было правильнымrack, за исключением того, что вы должны передать 160
в Select-Object -Index
, так как параметр -Index
ожидает индексы 0
, а не 1
номера строк :
# Extract the 161st line.
$pass = Get-Content Word_File.txt | Select-Object -Index 160
Чтобы преобразовать в нижний регистр:
$pass = (Get-Content Word_File.txt | Select-Object -Index 160).ToLower()
Выше будет сбой , если во входном файле будет меньше , чем 161 строка (ссообщение об ошибке You cannot call a method on a null-valued expression
).
Если вы предпочитаете спокойно получать без вывода , используйте следующее (в котором используются встроенные псевдонимы select
для Select-Object
и foreach
для ForEach-Object
для краткости):
$pass = Get-Content Word_File.txt | select -Index 160 | foreach ToLower