如何用PowerShell批量处理文件:重复含指定字符串的行并修改重复行内容
批量处理文本文件:针对含特定字符串的行重复并替换后缀
完整实现脚本
$directory = "K:\PS" # 定义需要替换的后缀列表,可按需调整 $replaceExtensions = @(".inf", ".bat", ".cmd", ".mov") Get-ChildItem $directory -File -Recurse -Include *.txt | ForEach-Object { # 逐行处理文件内容 $newContent = Get-Content $_.FullName | ForEach-Object { # 先输出原行,保留原始内容 $_ # 判断当前行是否包含带引号的.ini后缀 if ($_ -like "*`".ini`"*") { # 提取去掉.ini后缀的基础字符串(保留引号) $baseLine = $_ -replace '\.ini"$', '"' # 遍历后缀列表,生成替换后的新行 foreach ($ext in $replaceExtensions) { $baseLine -replace '"$', "$ext`"" } } } # 将处理后的内容写入原文件 $newContent | Set-Content $_.FullName }
关键逻辑拆解
- 目标文件遍历:和你原脚本逻辑一致,用
Get-ChildItem递归获取指定目录下的所有.txt文件。 - 逐行处理逻辑:
- 每一行先直接输出,确保原始内容完整保留。
- 通过
-like匹配包含".ini"的行(转义双引号避免语法冲突)。 - 用正则替换提取基础文件名:
-replace '\.ini"$', '"'会把行尾的.ini"替换为",比如把"K:\FILE1.ini"变成"K:\FILE1"。 - 遍历后缀列表,把每个后缀拼接到基础字符串末尾,生成新行。
- 文件写入:把所有处理后的行一次性写入原文件,因文件体积小,无需流处理。
效果验证
针对你提供的示例输入:
"K:\FILE1.ini" "K:\FILE1.cfg" "K:\FILE100.cfg"
脚本执行后会生成预期结果:
"K:\FILE1.ini" "K:\FILE1.inf" "K:\FILE1.bat" "K:\FILE1.cmd" "K:\FILE1.mov" "K:\FILE1.cfg" "K:\FILE100.cfg"
内容的提问来源于stack exchange,提问作者KolesGit
相关产品推荐
相关产品推荐

