找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 16308|回复: 10

[问题求助] PowerShell用替换法删除空行的问题

[复制链接]
发表于 2022-3-1 10:54:25 | 显示全部楼层 |阅读模式
下面的第二行代码执行后成功将文本内部的空行删除,但第一行不生效? 请高手指教! 多谢!!
另外, 第二行代码处理后最结尾会有两行空行, 我用第三行的代码, 执行后还是有一个空行, 能修改下正则把最后的两行也顺便删除吗?

(gc A.txt ) -replace "\s+\r\n+" | Out-File "b.txt"

[IO.File]::ReadAllText("A.txt") -replace '\s+\r\n+' | Out-File "b.txt"

([IO.File]::ReadAllText("A.txt") -replace '\s+\r\n+').Trim() | Out-File "b.txt"
-------------------------------------------------------------------------------------------------------------
刚发现一个问题, 第二行代码能删除空行, 但是下面的文字替换后,#1跑到了第一行的最后,感觉正则可能还需要改一下
-----------------------------------------
长夜未央的陪在我的身边


#1
阿衣妞妞
嗯海马塔莎洛
让风吹**脸上的泪痕
逝去的爱
不必再留恋
发表于 2022-3-1 18:59:01 | 显示全部楼层
gc返回的是数组
换行符都被替换没了,是不是要补一个回去
-replace '\s+\r\n',"`r`n"
 楼主| 发表于 2022-3-1 20:10:11 | 显示全部楼层
回复 2# idwma


    大侠牛X, 【#1跑到了第一行的最后】 这个问题解决了, 但是还有个小问题, 原文本中最后一行没有空行, 但是执行后, 会多个空行, 好像输出的命令都有这个问题  加了 .Trim()也不行
发表于 2022-3-2 11:58:32 | 显示全部楼层
本帖最后由 idwma 于 2022-3-2 12:11 编辑
  1. https://stackoverflow.com/questions/45266461/set-content-appends-a-newline-line-break-crlf-at-the-end-of-my-file
复制代码
找了一下感觉这个字节转换方法以后还可以用在别的地方
  1. [Text.Encoding]::default.GetBytes($((gc a.txt) -join "`r`n" -replace '\s+\r\n',"`r`n")) | sc -enc byte b.txt
复制代码
 楼主| 发表于 2022-3-2 18:39:47 | 显示全部楼层
本帖最后由 5i365 于 2022-3-2 18:44 编辑

回复 4# idwma

感谢大侠支招,  这回真是完美了

另外还是有一点缺憾, a.txt的编码还是得用您以前写的那段ps识别一下, 感觉还是稍有点长   ,

went大侠的Coder, 能自动转任意编码的文本为UTF8, 且都不乱码, 然后我就能在PS脚本的最开头, 设置默认读和写的编码都为UTF8, 这样不会出任何乱码问题

用您刚才出的招, 能曲线实现吗?  我结根结底, 是想要UTF8 不带Bom的最终文本【用[IO.File]::WriteAllLines】, 但是源文本, 又是各种的编码格式

如果一两行代码, 手改一下没什么, 如果代码长了, 里面的读文本的地方都得加编码格式, 不然就乱码
 楼主| 发表于 2022-3-2 18:55:56 | 显示全部楼层
回复 4# idwma


    好像又问题了, 下面这个文件, 是utf8带bom的, 直接用上面的代码输出报错, 但我看上面代码设为了byte格式, 那怎样最终得到UTF8的文本?
https://send.cm/d/99LA
发表于 2022-3-2 22:02:20 | 显示全部楼层
还是用went神的那个判断函数好,比较通用
代码有多长?可以看一下吗
 楼主| 发表于 2022-3-3 16:41:50 | 显示全部楼层
回复 7# idwma

嗯, 看来还是要在执行gc前加个判断稳, 我是做假设, 以后打算拼几个代码,组装一下, 编码换来换去很烦人
 楼主| 发表于 2022-3-3 16:45:10 | 显示全部楼层
回复 7# idwma


    怎样把went大侠的检测编码的ps代码,搞成一个函数, 然后在循环里使用它, 能写个例子吗? 比如把当前目录下的所有txt文件,转成 UTF8不带bom格式的txt
发表于 2022-3-3 19:30:20 | 显示全部楼层
原贴里不是有例子了吗
 楼主| 发表于 2022-3-4 14:21:42 | 显示全部楼层
回复 10# idwma


  在处理循环时, 遇到点问题, 稍后贴上代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:02 , Processed in 0.018950 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表