gpt4 book ai didi

regex - 在PowerShell中匹配字符串

转载 作者:行者123 更新时间:2023-12-01 11:15:53 28 4
gpt4 key购买 nike

这个问题的要点是:

因此,看来if ($C -match $b.Name)将字符串的部分匹配视为匹配?有没有更好的方法来强制字符串的完整[match]?

我有一个目录,其中填充有大量的.7z文件。我需要不断清理该目录。还有一个脚本,该脚本早于我在这里的工作,目前正在运行,但是它由3000行组成,并不断生成不正确的匹配项,并且不记录移动的内容或删除的内容。之所以如此之大,部分原因在于它具有大量的路径,这些路径需要将这些文件移至其中的硬编码位置。有时,这些路径会发生变化,并且很难进行更新。

因此,我已经开始制作一个更小的脚本,该脚本在CSV文件中引用了所有这些路径。除了这些路径之外,CSV文件中还记录了已知的文件名。

我正在尝试将文件名与CSV文件中记录的名称进行匹配。通常可以,但是有时候我得到不正确的匹配。

假设我有两个类似地启动的文件,Apple和Apple_Pie。 Apple将与Apple匹配并移至正确的目录,但是Apple_Pie将首先与Apple匹配并移至错误的目录。在清除$C变量之前,它将使Apple_Pie与正确的目录匹配,但是到那时,Apple_Pie不再存在于原始目录中,需要将其从中移出。

因此,看来if ($C -match $b.Name)将字符串的部分匹配视为匹配?有没有更好的方法来强制完成一个字符串?

我以为我对-match应该如何工作有些期望。

我在这里使用的regex东西是剥离通过另一个自动化过程添加到文件名的日期时间的每个文件名。我用它来隔离我要匹配的文件名。

$Wild = "C:\Some\Folder\With\Files\"

$CSV = "C:\Another\Folder\Paths.csv"

$Content = gci $wild

$Reg1 = [regex] '_[0-9]{4}-[0-9]{2}-[0-9]{2}[A-Z]{1}[0-9]{2}_[0-9]{2}_[0-9]{2}'

$Reg2 = [regex] '[0-9]{4}-[0-9]{2}-[0-9]{2}[A-Z]{1}[0-9]{2}_[0-9]{2}_[0-9]{2}'

$Paths = import-csv -path $CSV -header Name, Path

foreach ($a in $content) {
$c = $a.BaseName

if ($c -match $reg1) {
$c = $c -replace $regyear
}
elseif ($c -match $reg2) {
$c = $c -replace $reg2
}

foreach ($b in $Paths) {

if ($c -match $b.Name) {
Do something
}
}
}

最佳答案

我认为您的主要问题是您使用的是“匹配”。

它检查右字符串是否是左字符串的...部分,而不是它是否像您期望的那样实际匹配。

$a = "Test"
$b = "Test_me"

$a -match $b
False

$b -match $a
True

我将 -match替换为 -like

关于regex - 在PowerShell中匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51405381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com