标题: [文本处理] 批处理怎么删除for循环输出的最后一行的逗号? [打印本页]
作者: hello163commail 时间: 2014-4-2 00:06 标题: 批处理怎么删除for循环输出的最后一行的逗号?
本帖最后由 pcl_test 于 2016-9-21 12:04 编辑
代码如下:- @echo off
- echo {
- echo "data":[
- for /f "skip=3 tokens=1" %%i in ('tasklist') do echo {"{#FSNAME}":"%%i"},
- echo ]
- echo }
- pause
复制代码
输出如下:
{
"data":[
{"{#FSNAME}":"System"}, #保留这个逗号
{"{#FSNAME}":"System"}, #保留这个逗号
……
{"{#FSNAME}":"tasklist.exe"}, #删除这个逗号
]
}
作者: hfg1977 时间: 2014-4-2 08:35
WIN7下正常,不存在所指逗号。
作者: Batcher 时间: 2014-4-2 09:01
逗号从哪里来的?
tasklist输出结果的第一列里面没有逗号吧
作者: hello163commail 时间: 2014-4-2 09:09
回复 2# hfg1977
搞错了,源代码是这样的:- @echo off
- echo {
- echo "data":[
- for /f "skip=3 tokens=1" %%i in ('tasklist') do echo {"{#FSNAME}":"%%i"},
- echo ]
- echo }
- pause
复制代码
作者: hello163commail 时间: 2014-4-2 09:09
回复 3# Batcher
不好意思,搞错了,源代码是这样的- @echo off
- echo {
- echo "data":[
- for /f "skip=3 tokens=1" %%i in ('tasklist') do echo {"{#FSNAME}":"%%i"},
- echo ]
- echo }
- pause
复制代码
作者: hlzj88 时间: 2014-4-2 11:43
你的代码for语句最后有一个点,去掉我测试没问题
作者: hello163commail 时间: 2014-4-2 12:03
回复 6# hlzj88
输出如下
{
"data":[
{"{#FSNAME}":"System"},
{"{#FSNAME}":"System"},
……
{"{#FSNAME}":"tasklist.exe"}, #删除这个逗号
]
}
只是删除最后一个逗号,其他行的逗号保留。
作者: apang 时间: 2014-4-2 12:42
- @echo off & setlocal enabledelayedexpansion
- echo {
- echo "data":[
- for /f "skip=3" %%i in ('tasklist') do (
- if defined a echo {"{#FSNAME}":"!a!"},
- set "a=%%i"
- )
- echo,{"{#FSNAME}":"!a!"}
- echo ]
- echo }
- pause
复制代码
作者: hello163commail 时间: 2014-4-2 13:55
回复 8# apang
好厉害,测试成功,不过没看懂。
作者: hello163commail 时间: 2014-4-2 15:25
回复 9# hello163commail
如果我要将几个相同的进程变成一个,该怎么做?像这样输出
{
"data":[
{"{#FSNAME}":"System"},
{"{#FSNAME}":"System"}, #删除这行
……
{"{#FSNAME}":"tasklist.exe"}
]
}
作者: terse 时间: 2014-4-2 18:03
回复 10# hello163commail
第5行 改为- if not defined !a! if defined a echo {"{#FSNAME}":"!a!"},
- set "!a!=a
复制代码
作者: DAIC 时间: 2014-4-2 19:39
回复 8# apang
不是很严谨,因为最后两个进程名可能是相同的。
作者: apang 时间: 2014-4-2 23:18
回复 12# DAIC
最后两个进程名相同应该不受影响吧?消除重复是lz后来的要求
其实最不严谨的是,进程名有可能会包含空格,还有可能会包含特殊字符,处理起来比较罗嗦- @echo off
- (for /f delims^=^" %%a in ('tasklist /nh /fo csv') do (
- if not defined %%a (
- set "%%a=1" & set /a n+=1
- echo,{"{#FSNAME}":"%%a"}
- )
- ))>$
-
- echo {
- echo "data":[
- for /f "tokens=1*delims=:" %%a in ('findstr /n .* $') do (
- if "%%a" neq "%n%" (echo,%%b,) else echo,%%b
- )
- echo ]
- echo }
- del $
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |