PowerShell去除TXT中同JPG前缀重复行方法求助
解决PowerShell中按JPG基础路径去重URL行的问题
普通的去重方法(比如Select-Object -Unique)确实没法处理这种参数不同但指向同一个JPG的情况——它们会把整个URL当成判断重复的依据。这里给你两种实用的解决方案,根据你的需求选就行:
方案1:保留每个JPG对应的第一行
这个脚本会遍历所有URL,只保留每个JPG基础路径第一次出现的那一行:
# 替换成你的输入文件路径 $inputFilePath = "C:\your\input.txt" # 替换成你的输出文件路径 $outputFilePath = "C:\your\output.txt" # 用哈希表记录已经处理过的JPG路径 $processedJpgPaths = @{} # 逐行读取并处理 Get-Content -Path $inputFilePath | ForEach-Object { # 提取问号前的JPG基础路径(不管有没有参数都能正常工作) $baseJpgPath = $_ -split '\?' | Select-Object -First 1 # 如果这个路径还没被处理过,就写入输出文件并标记为已处理 if (-not $processedJpgPaths.ContainsKey($baseJpgPath)) { $_ | Add-Content -Path $outputFilePath $processedJpgPaths[$baseJpgPath] = $true } }
方案2:保留每个JPG对应的最后一行
如果你想保留每个JPG最后一次出现的那一行,可以用分组的方式处理:
$inputFilePath = "C:\your\input.txt" $outputFilePath = "C:\your\output.txt" # 按JPG基础路径分组,然后取每组的最后一行写入输出 Get-Content -Path $inputFilePath | Group-Object -Property { $_ -split '\?' | Select-Object -First 1 } | ForEach-Object { $_.Group[-1] | Add-Content -Path $outputFilePath }
关键说明
- 两种方案都会自动处理没有参数的URL(比如直接是
https://mysite.local/9999/9999_01_00.jpg的情况),因为-split '\?'之后只会得到原字符串,不影响判断。 - 哈希表的方式性能更好,适合处理大文件;分组的方式代码更简洁,逻辑直观。
内容的提问来源于stack exchange,提问作者VeilleurTryToFix
相关产品推荐
相关产品推荐

