[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何将同一行内容自动换行?

本帖最后由 lonron 于 2023-4-14 21:02 编辑
  1. {"fileId":"82474140744160028","fileName":"测试文件1.exe","fileSize":1575742,"fileType":"exe","isFolder":false,"createTime":"2022-12-19 14:58:31","lastOpTime":"2023-03-30 18:00:48","url":"436c7fd527213cb63d26dde4be6d702b5c50b0a19617b0f577fdc395095ad220fbbeb6e462ab99f63a2b2f5ccc9b428b98715086072763289c44b26e7e7c92d6"},{"fileId":"82486141026441368","fileName":"测试文件2.exe","fileSize":2021129740,"fileType":"exe","isFolder":false,"createTime":"2022-12-21 12:03:02","lastOpTime":"2023-03-30 18:02:45","url":"436c7fd527213cb63d26dde4be6d702b5c50b0a19617b0f577fdc395095ad22073f81f0692d5a6bb0c647e4ec30104b998715086072763289c44b26e7e7c92d6"},{"fileId":"52393157241817145","fileName":"测试文件3.exe","fileSize":3270166619,"fileType":"exe","isFolder":false,"createTime":"2023-03-24 22:02:27","lastOpTime":"2023-03-30 18:02:39","url":"436c7fd527213cb63d26dde4be6d702b6dbc0c88d300af99ea325241126fbda9c9055f4cc6dd7264a2f3166668bcbb5998715086072763289c44b26e7e7c92d6"},{"fileId":"72408159516708019","fileName":"测试文件4.exe","fileSize":124534230,"fileType":"exe","isFolder":false,"createTime":"2023-04-06 13:02:06","lastOpTime":"2023-04-06 13:02:06","url":"436c7fd527213cb63d26dde4be6d702bf1e905559843e42cea1dae75df4e28229ddf191b0cc2660c4d0f555b2c4ddc7598715086072763289c44b26e7e7c92d6"},{"fileId":"92365143335143586","fileName":"测试文件5.exe","fileSize":26051557,"fileType":"exe","isFolder":false,"createTime":"2023-01-05 16:08:27","lastOpTime":"2023-03-30 18:02:33","url":"436c7fd527213cb63d26dde4be6d702b8220e0080713c08cbe1e9f4139522e664a289dd4dca12eb9af645ea22958582298715086072763289c44b26e7e7c92d6"},{"fileId":"62329140744365621","fileName":"测试文件6.exe","fileSize":35043416,"fileType":"exe","isFolder":false,"createTime":"2022-12-19 15:01:20","lastOpTime":"2023-03-30 18:02:27","url":"436c7fd527213cb63d26dde4be6d702b883eef7895d30b8c0cec047a5ba099256186f7b2ffaeacba207c74a89637074c98715086072763289c44b26e7e7c92d6"},{"fileId":"12486140744030191","fileName":"测试文件7.exe","fileSize":59686896,"fileType":"exe","isFolder":false,"createTime":"2022-12-19 14:57:41","lastOpTime":"2023-03-30 18:00:21","url":"436c7fd527213cb63d26dde4be6d702b3f13d9e5712fb34717f2317a8eb682cfd1f36a9d465fc0f90e759b702ea4605198715086072763289c44b26e7e7c92d6"},{"fileId":"22486145619725981","fileName":"测试文件8.exe","fileSize":85052424,"fileType":"exe","isFolder":false,"createTime":"2023-01-18 22:44:19","lastOpTime":"2023-03-30 18:01:46","url":"436c7fd527213cb63d26dde4be6d702b592b947f1de0a4f83de736a55ce2c23ae8e8ea6d1096d69a56b1a344d88a811f98715086072763289c44b26e7e7c92d6"},{"fileId":"52550160899027709","fileName":"测试文件9.exe","fileSize":2193907800,"fileType":"exe","isFolder":false,"createTime":"2023-04-14 09:13:35","lastOpTime":"2023-04-14 09:13:35","url":"436c7fd527213cb63d26dde4be6d702b6dbc0c88d300af99ea325241126fbda92e4a1efac943fbec0f12de9d5b4a7bfc98715086072763289c44b26e7e7c92d6"},{"fileId":"92415142359643162","fileName":"测试文件10.exe","fileSize":30655423,"fileType":"exe","isFolder":false,"createTime":"2022-12-30 14:40:35","lastOpTime":"2023-03-30 18:00:40","url":"436c7fd527213cb63d26dde4be6d702b8220e0080713c08cbe1e9f4139522e66209a2014fac136399ad357c10714b7f598715086072763289c44b26e7e7c92d6"}
复制代码
如上数据,保存在本地的一个命名为test.txt的文本文件。
由于数据都在 同一行 且可能实际数据量更多,所以直接用 for 循环可能会存在变量不够用的情况。
故想请教各位老师是否可以将这一行数据用什么命令使其在特定位置换行,然后再用 for 将 fileId、fileName、fileSize 后的这三个数据提取出来。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# lonron


在你的文本开头加一个[
在你的文本结尾加一个]
文本内容另存为UTF-8编码

下载jq64.exe把它和你的test.txt放在同一个目录
http://bcn.bathome.net/s/tool/index.html?key=jq64

test.bat保存为UTF-8编码然后双击执行
  1. @echo off
  2. chcp 65001
  3. jq64.exe < "test.txt" | findstr /c:"fileId" /c:"fileName" /c:"fileSize" > "test_new.txt"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 lonron 于 2023-4-14 16:06 编辑

回复 2# Batcher


    得出的结果是这样的,
  1.     "fileId": "82474140744160028",
  2.     "fileName": "测试文件1.exe",
  3.     "fileSize": 1575742,
  4.     "fileId": "82486141026441368",
  5.     "fileName": "测试文件2.exe",
  6.     "fileSize": 2021129740,
  7.     "fileId": "52393157241817145",
  8.     "fileName": "测试文件3.exe",
  9.     "fileSize": 3270166619,
复制代码
能否把这三个字段输出在同一行呢?
像这样:
  1.     "fileId": "82474140744160028","fileName": "测试文件1.exe","fileSize": 1575742,
  2.     "fileId": "82486141026441368","fileName": "测试文件2.exe","fileSize": 2021129740,
  3.     "fileId": "52393157241817145","fileName": "测试文件3.exe","fileSize": 3270166619,
复制代码

TOP

回复 2# Batcher


    老师帮帮忙!

TOP

  1. rem http://www.bathome.net/redirect.php?goto=findpost&ptid=36013&pid=169719
  2. @sed -i "/},/ s//\n/g" filename.txt
复制代码

使用sed直接把 }, 替换为换行符,我改了下代码,不知道有没有问题,是在原文件直接操作的,注意备份
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 5# 77七


    http://bcn.bathome.net/s/tool/index.html?key=sed
是这里面哪个工具?

TOP

回复 6# lonron


   http://bcn.bathome.net/tool/4.8/sed.exe sed  流文本处理工具
bat小白,请多指教!谢谢!

TOP

回复 3# lonron
  1. @echo off
  2. chcp 65001
  3. jq64.exe < "test.txt" | findstr /c:"fileId" /c:"fileName" /c:"fileSize" > "test_new1.txt"
  4. (for /f "tokens=1* delims=:" %%i in ('type "test_new1.txt"') do (
  5.     set /p ="%%i:%%j "<nul
  6.     if "%%i" equ "    "fileSize"" (
  7.         echo,
  8.     )
  9. ))>"test_new2.txt"
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# 77七


    老师您好,我在使用sed命令之后有一个疑问,需要您帮忙解答下:是否可以在一条命令中定义两处或以上不同符号的换行操作?如果可以应该怎么写?(我不会正则表达式)

TOP

回复 9# lonron


   

我也没学过sed,试了一下
  1. @sed -i "/},/ s//\n/g;/:/ s//\n/g" 1.txt
复制代码


将 }, 和 : 替换为换行符
1

评分人数

bat小白,请多指教!谢谢!

TOP

给一个纯P解法》test.txt存为ansi(简中)格式。
  1. @echo off
  2. for /f "delims=" %%a in (test.txt) do (set "all=%%a")
  3. set alllines=%all:},=}^&echo,%
  4. (echo,%alllines%)>test.new
  5. for /f "tokens=1-3 delims={," %%1 in (test.new) do (echo,%%1,%%2,%%3)
  6. pause&exit/b
复制代码

TOP

这是json 为什么不直接用jscript脚本呢?

TOP

本帖最后由 lonron 于 2023-5-8 10:36 编辑

回复 11# aloha20200628


    如果可以不借助第三方命令确实很好,不过for好像单行8000多个左右的字符就无效了,实际的数据比我列出的多多了。有没有办法绕过for的单行数据字符数量限制?

TOP

本帖最后由 terse 于 2023-4-25 01:44 编辑
  1. @if(0)==(0) echo off
  2. cscript -NoLogo -E:JScript %0 <a.txt
  3. pause & exit
  4. 文件有中文情况,存为ANSI格式
  5. @end
  6. var text =WSH.StdIn.ReadAll();
  7. var arr=text.match(/\{.*?\}/g)
  8. for (i = 0, len=arr.length; i<len; i++) {
  9.       var obj = new Function("return" + unescape(arr[i]))();
  10.       WSH.Echo(obj.fileId,obj.fileName,obj.fileSize);
  11. }
复制代码
  1. powershell "((sls -Path .\aa.txt -Pattern '\{.*?\}' -AllMatches ).Matches.Value|ConvertFrom-Json|group fileId,fileName,fileSize).name"
复制代码
另一种格式的话
  1. @if(0)==(0) echo off
  2. cscript -NoLogo -E:JScript %0 <a.txt
  3. pause & exit
  4. 文件有中文情况,存为ANSI格式
  5. @end
  6. var text =WSH.StdIn.ReadAll();
  7. var obj = new Function("return" + unescape(text))();
  8. var arr = obj.data;
  9. for (i = 0, len=arr.length; i<len; i++) {
  10.       WSH.Echo(arr[i].fileId,arr[i].fileName,arr[i].fileSize);
  11. }
复制代码
1

评分人数

    • lonron: 感谢帮助,PS的方式很赞技术 + 1

TOP

回复 14# terse


    感谢老师帮助,请问powershell的这个方式如果在 https://189.ly93.cc/qieiaeUNRrMj?accessCode=? 上面这种格式的数据头要如何修改?以及数据段落之间能否换成其他分隔符,比如 “|”。
另外因为数据源我是在网页上抓取的,本身自动保存的是UTF-8格式,如果在完全不考虑手动另存为的情况,如何将JS的这两种方式在数据源带中文的时候可以不乱码?

TOP

返回列表