Обрезать текст в строке после / перед разделителем в powershell - PullRequest
11 голосов
/ 05 марта 2011

Хорошо, вот что я пытаюсь сделать: я хочу сделать небольшой скрипт powershell, который берет каждый файл моей музыкальной библиотеки, а затем делает хэш-сумму и записывает это в файл следующим образом:

test.txt;131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198

Теперь, когда я запускаю скрипт, мне нужно сначала сравнить мою музыкальную библиотеку с уже существующими значениями, но для этого я просто хочу сократитьот всего после;так что он может сравнить имя файла с именем файла (или filepath) ... но я ошеломлен, как это сделать, попытался заменить на $ name = $ name -replace "; *", "" no go ...

пытался отфильтровать ... не знаю, как D:

Я очень признателен за помощь.

Также, если вы думаете, что я использую неправильный язык кодирования, скажитея и что было бы лучше, просто я когда-либо использовал только C и powershell

Ответы [ 5 ]

40 голосов
/ 05 марта 2011
$pos = $name.IndexOf(";")
$leftPart = $name.Substring(0, $pos)
$rightPart = $name.Substring($pos+1)

Внутри PowerShell используется класс String .

7 голосов
/ 25 декабря 2014
$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"

$text.split(';')[1].split(' ')
2 голосов
/ 25 декабря 2014

Вы можете использовать Split:

$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"
$separator = ";" # you can put many separator like this "; : ,"

$parts = $text.split($separator)

echo $parts[0] # return test.txt
echo $parts[1] # return the part after the separator
1 голос
/ 27 марта 2012

Это работает для определенного разделителя для определенного количества символов между разделителем. У меня было много проблем, пытаясь использовать это в каждом цикле, где позиция менялась, но разделитель был таким же. Например, я использовал обратную косую черту в качестве разделителя и хотел использовать только все, что находится справа от обратной косой черты. Проблема заключалась в том, что, как только позиция была определена (71 символ с начала), она будет использовать $ pos как 71 каждый раз, независимо от того, где на самом деле был разделитель в скрипте. Я нашел другой метод использования разделителя и .split для разделения, а затем использовал переменную split для вызова разделов. Например, первый раздел был $ variable [0], а второй раздел был $ variable [1].

0 голосов
/ 04 февраля 2017

У меня был полный каталог файлов, в том числе файлы с именем invoice no-product no.pdf, и я хотел отсортировать их по номеру продукта, поэтому ...

get-childitem *.pdf | sort-object -property @{expression={$\_.name.substring($\_.name.indexof("-")+1)}}

Обратите внимание, что при отсутствии - это сортируется по $_.name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...