PowerShell:基于另一文件内容更新文件,在.pdf前添加1
PowerShell 批量修改File2.txt中PDF路径的解决方案
没问题,我来帮你搞定这个需求!你要做的就是在File2.txt每条记录的.pdf后缀前添加一个1,比如把\\Serv02\LOC6\Client\726C30\032383\22000180231.pdf改成\\Serv02\LOC6\Client\726C30\032383\220001802311.pdf对吧?下面给你两种可靠的PowerShell实现方式:
方式一:高效批量替换(单命令完成)
这个方法一次性读取整个文件内容,用正则替换后写回,速度更快:
# 注意:执行前请先备份File2.txt!该命令会直接覆盖原文件 (Get-Content -Path "File2.txt" -Raw) -replace '\.pdf$', '1.pdf' | Set-Content -Path "File2.txt" -Encoding UTF8
说明:
-Raw参数让PowerShell一次性读取整个文件内容,避免逐行处理的额外开销- 正则
'\.pdf$'专门匹配行尾的.pdf(确保只修改路径最后的PDF后缀,不会误改路径中间可能出现的点字符) -Encoding UTF8保证文件编码不会出现乱码问题
方式二:逐行处理(适合需要额外逻辑扩展的场景)
如果你之后需要在处理每行时添加其他操作,比如筛选特定路径,可以用逐行处理的方式:
# 读取原文件内容 $originalLines = Get-Content -Path "File2.txt" # 逐行处理:在每行的.pdf前添加1 $modifiedLines = $originalLines | ForEach-Object { $_ -replace '\.pdf$', '1.pdf' } # 将处理后的内容写回文件(同样建议先备份原文件) $modifiedLines | Set-Content -Path "File2.txt" -Encoding UTF8
为什么之前正则可能只部分生效?
你之前用正则更新时部分失效,大概率是因为正则没有精准匹配行尾的.pdf——比如如果你的正则没加$(行尾锚定符),可能会误匹配路径中间的点字符,或者有些行的.pdf前面有空格?不过你说每行无空格,那更可能是没有锚定行尾,导致某些特殊路径没匹配到。上面的正则'\.pdf$'就解决了这个问题,确保只处理每条记录末尾的PDF后缀。
内容的提问来源于stack exchange,提问作者DataLore
相关产品推荐
相关产品推荐

