在powershell中分隔符之后/之前切断字符串中的文本

时间:2011-03-05 12:12:50

标签: string powershell

好的,这就是我要做的事情: 我想制作一个小的PowerShell脚本,它接收我的音乐库的每个文件,然后对它进行哈希求和并将其写入文件中,如下所示:

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

现在,当我开始编写脚本时,我需要首先将我的音乐库与已有的值进行比较,但为此我只想在切断之后切断所有内容。这样它可以将文件名与文件名(或文件路径)进行比较......但是我很难过如何做到这一点,尝试用 $ name = $ name -replace“; *”,“” 不去......

尝试过滤......不知道D:

我真的很感激帮助。

另外如果您认为我使用的是错误的编码语言,请告诉我什么会更好,只是我只使用过C和powershell

7 个答案:

答案 0 :(得分:40)

$pos = $name.IndexOf(";")
$leftPart = $name.Substring(0, $pos)
$rightPart = $name.Substring($pos+1)

在内部,PowerShell使用String class

答案 1 :(得分:6)

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

$text.split(';')[1].split(' ')

答案 2 :(得分:2)

您可以使用 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

答案 3 :(得分:1)

这适用于分隔符之间特定字符数量的特定分隔符。我有很多问题试图在每个循环中使用它,其中位置改变但是分隔符是相同的。例如,我使用反斜杠作为分隔符,并且只想使用反斜杠右侧的所有内容。问题是,一旦定义了位置(从一开始就有71个字符),无论分隔符在脚本中的实际位置如何,每次都会使用$ pos作为71。我找到了另一种使用分隔符和.split来分解的方法,然后使用split变量来调用节。例如,第一节是$ variable [0],第二节是$ variable [1]。

答案 4 :(得分:0)

我的文件中包含一些名为invoice no-product no.pdf的文件,并希望按产品编号排序,所以......

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

请注意,如果没有-,请按$_.name

排序

答案 5 :(得分:0)

使用正则表达式,结果为$ matches [1]:

$str = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"
$str -match "^(.*?)\s\;"
$matches[1]
test.txt

答案 6 :(得分:0)

$name -replace ";*",""

您很亲密,但是您使用的是wildcard expresson而不是regular expression的语法,这正是-replace operator的期望。

因此(哈希序列缩短):

PS> 'test.txt ; 131 136 80 89 119 17 60 123 210 121 188' -replace '\s*;.*'
test.txt

注意:

  • 省略替换文本操作数(第二个RHS操作数)将隐式使用""(空字符串),即有效地删除正则表达式匹配的内容。

  • .*表示正则表达式中字符(*)的潜在空行(.)-它与*的正则表达式等效em>本身在通配符表达式中。

  • 在正则表达式中的\s*之前添加;也会删除文件名后的尾随空格(\s)。

  • 我使用'...'而不是"..."来封装正则表达式,以防止在PowerShell预先展开的内容(请参阅expandable strings in PowerShell和.NET内容之间造成混淆)正则表达式引擎可以看到。