标题: [文本处理] 批处理命令for /f 取值后赋值给变量,分隔符用什么? [打印本页]
作者: andycker 时间: 2022-10-8 21:01 标题: 批处理命令for /f 取值后赋值给变量,分隔符用什么?
有个123.txt文件,里面有这些信息:
{"Type":0,"Aid":"558660944","Bid":"BV1je4y1z7S3","Cid":"850965837","SeasonId":null,"EpisodeId":null,"Title":"99%都不知道的中医经络、穴位功能记忆口诀,太全了 03:38教你快速记住人体12条经络 中医经络穴位全脑速记--关于记忆的几点分享 十二正经穴位快速记忆","Uploader":"逆袭教典澄","Description":"中医经络穴位全脑速记","CoverURL":"http://i1.hdslb.com/bfs/archive/751cbc3b35df0df651715a3c0815a85bb1ee2ac3.png","Tag":null,"From":"vupload","PartNo":"1","PartName":"00中医经络穴位全脑速记--关于记忆的几点分享","Format":2,"TotalParts":1,"DownloadTimeRelative":252945257,"CreateDate":"2022-10-03 16:48"}
现在想获取PartName":" 到 ","Format" 之间的内容,写入变量。
写了个循环 成功读取到这个内容,- for /f "delims=, tokens=14 usebackq" %%i in ("123.txt") do (set partname=%%i)
复制代码
delims=用的逗号分割的 ,发现其它txt样本的逗号的数量不一定是多少个,所以会取不到值,
请教一下,还有别的方法吗?
可以用引号作为分隔符吗? 或者 用delims="," 用这三个字符 分隔,我用了闪退,不知道怎么把引号转义
作者: andycker 时间: 2022-10-8 22:33
本帖最后由 andycker 于 2022-10-8 22:35 编辑
参考论坛的帖子,使用转义的方法把引号作为分隔符,后发现tokens超过31的数字 就不能输出,看来没解了- for /f delims^=^*^ tokens^=31 %%i in (123.txt) do (echo %%i)
复制代码
如果把tokens的31换成32或者更大的数字 ,不能输出,不知道为什么
作者: andycker 时间: 2022-10-8 22:52
本帖最后由 andycker 于 2022-10-8 22:57 编辑
回复 2# andycker
找到了WHY的帖子
看看能不能解决
for /f "tokens=31* delims=," %%i in (1.txt) do (
for /f "tokens=23 delims=," %%k in ("%%j") do echo;%%k
)
作者: qixiaobin0715 时间: 2022-10-9 08:33
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('findstr "PartName.*Format" 123.txt') do (
- set "str=%%a"
- set "str=!str:*PartName":=!"
- for /f "delims=," %%b in ("!str!") do set partname=%%~b
- )
- pause
复制代码
作者: Batcher 时间: 2022-10-9 09:39
回复 1# andycker
如果遇到复杂的JSON格式,可以考虑调用第三方命令行工具,比如 jq.exe
http://bcn.bathome.net/s/tool/index.html?key=jq
作者: aloha20200628 时间: 2022-10-9 12:19
解法备注》
一。可以不管 JSON 列表中的分隔符数量
二。选择一个特殊的字符作为卡位字符(此处采用◆)
三。只要 JSON 列表长度不超过CMD对单个变量长度的上限(8KB)- @echo off &setlocal enabledelayedexpansion
- for /f "usebackq delims=" %%a in ("123.txt") do (
- set "s=%%a"
- set s=!s:"PartName":"=◆!
- set s=!s:","Format"=◆!
- for /f "tokens=1-2 delims=◆" %%1 in ("!s!") do echo,%%2
- )
- endlocal&pause&exit/b
复制代码
作者: andycker 时间: 2022-10-9 22:50
回复 4# qixiaobin0715
qixiaobin0715 你的代码很厉害
作者: andycker 时间: 2022-10-9 22:51
回复 5# Batcher
谢谢管理员
作者: andycker 时间: 2022-10-9 22:51
回复 6# aloha20200628
读懂了你的意思,谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |