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

[文本处理] 求助批处理循环处理行的第一列输出对应的第二列

[复制链接]
发表于 2020-4-15 10:11:03 | 显示全部楼层 |阅读模式
文件名jobnamecheck.txt。
100034::0
100056::2
100047::4
100021::0

需求如下:以::做分割,批处理第一列,然后根据第一列的某个参数能输出对应的第二列的数据。麻烦大佬帮忙写个bat脚本我只会linux的。linux的命令是这样的:
  1. #!/bin/bash
  2. function check() {
  3.   status=(` cat /tmp/jobnamecheck.txt|grep "^$1::"|awk -F '::' '{print $2}'`)
  4.   printf "$status"
  5. }
  6. $1 $2
复制代码
发表于 2020-4-15 10:15:29 | 显示全部楼层
本帖最后由 netdzb 于 2020-4-15 10:17 编辑

回复 1# 572105002

好像是用for / 这样来搞的啊,代码我也学不出,但我能看懂。
你搜一下for的基本用法很快能找到答案。

分割符是 delimes =::,
不知道冒号需要转义吗?
发表于 2020-4-15 10:21:35 | 显示全部楼层
回复 1# 572105002

我顺路请教一下,grep "^$1::"怎么理解?谢谢。
 楼主| 发表于 2020-4-15 11:07:47 | 显示全部楼层
回复 3# netdzb


    这个就属于linux的正则了,grep ‘^$1::’ 就是以::做分隔符匹配出第一列,^的作用就是为了第一列的数字绝句匹配,这一行简单理解就是,以::做分隔符循环匹配第一列,输出对应的第二列
发表于 2020-4-15 12:01:31 | 显示全部楼层
本帖最后由 went 于 2020-4-15 15:12 编辑

输入第一列,输出第二列这意思吗
  1. @echo off
  2. set /p "input=input:"
  3. for /f "tokens=1-2 delims=:" %%i in ('type "tes.txt"') do if "%%i"=="%input%" echo %%j && set "find=true"
  4. if not "%find%"=="true" echo %input% not found!
  5. pause&exit
复制代码
发表于 2020-4-15 12:27:53 | 显示全部楼层
回复 5# went

我就一直不明白for/f和for/r之间有什么区别?
发表于 2020-4-15 12:37:23 | 显示全部楼层
回复 6# netdzb


    /r只能遍历文件,/f是万能的,哪个用着方便就用那个
 楼主| 发表于 2020-4-15 13:29:49 | 显示全部楼层
回复 5# went
大佬,能不能做成这样ceshi.bat 后面跟第一列的任意数据,就能输出对应的第二列数据。
示例
ceshi.bat 100056    输出2
发表于 2020-4-15 13:48:16 | 显示全部楼层
本帖最后由 went 于 2020-4-15 15:11 编辑

如果没找到就不会有任何输出
  1. @echo off & for /f "usebackq tokens=1-2 delims=:" %%i in ("tes.txt") do if "%%i"=="%1" echo %%j
复制代码
回复 8# 572105002
发表于 2020-4-15 14:48:23 | 显示全部楼层
回复 9# went


delims=:: 没有实际发生作用吧
delims=: 这样就够了
发表于 2020-4-15 15:08:13 | 显示全部楼层
回复 3# netdzb


grep "^$1::" 意思是查找以某个字符串开头的行,效果类似于Windows的 findstr "^%1::"
发表于 2020-4-15 15:11:56 | 显示全部楼层
回复 10# Batcher


    嗯没什么作用,多写了一个,已修改
 楼主| 发表于 2020-4-16 10:11:07 | 显示全部楼层
回复 12# went
大佬,我再多问一句,这个文件里的两列数据是不是分别用%%i、%%j表示的,求解答
发表于 2020-4-16 10:42:30 | 显示全部楼层
题外话:grep, gawk 这种工具也有 Windows 移植版(
 楼主| 发表于 2020-4-17 10:35:11 | 显示全部楼层
回复 14# bailong360

有是有,gawk我装好了,grep总是安装不好,环境变量不知道怎么配
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 23:08 , Processed in 0.033873 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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