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

[文本处理] 批处理怎么取到正确的列(某列可能为空)?

tasklist结果有5列,其中最后一列为内存
但可能第3列“会话”可能空,则会把第5列当第4列(本来想取5,864 ,结果取成了K)

映像名称                       PID     会话名              会话#       内存使用
========================= ======== ================ =========== ============
explorer.exe                  6748                                     4                5,864 K
explorer.exe                  4920 RDP-Tcp#82                 1              16,600 K

想用如下bat取第
  1. for /F "skip=3 tokens=5" %i in ('tasklist /fi "IMAGENAME eq explorer.exe"  ') do echo %i
复制代码
怎么才能取到5,864和16,600,而不是取K和16,600

本帖最后由 apang 于 2013-3-22 13:06 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('tasklist /fi "imagename eq explorer.exe" /nh /fo csv') do (
  3.    for %%b in (%%a) do set "var=%%~b"
  4.    echo,!var: k=!
  5. )
  6. pause
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /F "tokens=*" %%i in ('tasklist /nh /fi "IMAGENAME eq explorer.exe" /FO CSV') do (
  3.     FOR %%a in (%%i) do set str=%%a
  4.     for /F %%a in (!str!) do set "str=%%a"
  5.     echo !str!
  6. )
  7. pause
复制代码

TOP

本帖最后由 ditto 于 2013-3-22 14:07 编辑

多谢2位  慢慢学习下
!str! 是啥意思

TOP

  1. for /f tokens^=8delims^=^" %%a in ('tasklist /fi "imagename eq explorer.exe" /nh /fo csv') do echo %%a
复制代码

TOP

  1. tasklist /fi "IMAGENAME eq explorer.exe" 2>&1 | gawk "/explorer.exe/{print $(NF-1)}"
复制代码

TOP

  1. tasklist /fi "IMAGENAME eq explorer.exe" 2>&1 | sed "/explorer.exe/!d;s/.*[ \t]\([0-9,]\+\)[ \t]K/\1/"
复制代码

TOP

回复 7# BAT-VBS
  1. tasklist /fi "IMAGENAME eq explorer.exe"|sed "s/.*  //"
复制代码

TOP

回复 8# CrLf


    不符合楼主要求吧

TOP

返回列表