Programming 板


LINE

※ 引述《ya6101461014 (MaxDing)》之铭言: : 各位大大好 : 小弟想请问一下 : 目前有一个外部程式会产生一个ini档 : 内容10行以内大概如下 : aaaaa - 111111 : aaaaa - 22222 : bbbbb - 22222 : 每次产生的内容都不一样 : 我想写一个bat去判断如果有aaaaa - 22222 : 出现就做一个动作 : 目前使用for /f %%a去判断 但是只能撷取到空格之前的 : aaaaa或是bbbbb : 後面空格跟- 11111 或是- 22222没办法加到%%a内 : 有办法判断整行包含空格跟-吗? : 麻烦了谢谢各位 一般来说这有两种方法, 都是使用 for /f 的额外关键字选项 这就要讲到 for /f 是怎麽判定什麽东西要指定进变数的 首先在处理完 in (...) 里面的来源之後 它会把各行拆开, 每一行是一次指定变数 + 执行 do 之後 指定变数的方法是把该行以空白做分界拆开, 把拆出来的第一个指定进变数 而这些关键字选项即是指定拆开方式的 上面提到的可以用的两种 其一是 tokens= 它会把照分界拆开的字串根据所指定的第几个指定进变数 也就是说, 没写的预设就是 tokens=1 的意思 可以指定多个, 用逗号分隔或写成 x-y 这样连续范围 就会连续指定进照字母顺序接下来的变数名 例如: for /f "tokens=1-3,6" %a in (file.txt) do ... 就会把前三个拆出来的字串指定进 %a, %b, %c 里, 第六个指定进 %d 里 最後面还可以多一个 * 这样就是说指定的最後一个之後剩下的存进再下一个变数里 如: for /f "tokens=2,5*" %a in (file.txt) do ... 就是第二个进 %a, 第五个进 %b, 第六个之後进 %c 另一个可以用的是 delims= 它会指定用来拆开字串的分界字元是什麽 例如如果来源档案是逗号分隔的资料, 那就能用 "delims=," 来拆开 同样可以指定多个, 直接并排就好了, 例如 "delims=,;" 就是用逗号和分号拆开 这两个选项各自都可以达成把一行所有东西指定进单一变数里 使用 tokens= 的话是 "tokens=*" 也就是从一开始所有的东西就直接存进变数 使用 delims= 的话是 "delims=@" 其中 @ 是一个你的档案里没有出现过的字 ==== (以下剪贴 for /? 的部份内容, 是这个语法的完整说明 在命令提示字元下打 for /? 可以查询 for 的完整语法) FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] FOR /F ["options"] %variable IN ("string") DO command [command-parameters] FOR /F ["options"] %variable IN ('command') DO command [command-parameters] 或,如果使用 usebackq 选项: FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] FOR /F ["options"] %variable IN ('string') DO command [command-parameters] FOR /F ["options"] %variable IN (`command`) DO command [command-parameters] file-set 可以是一或多个档案名称。继续进行 file-set 中的下个 档案之前,都已开启、读取及处理过每个档案。处理程序包括读取 档案、将它分割成独立的文字行,然後将每一行剖析成零或多个语 法。使用已设成找到之语法字串的变数值,呼叫 For 回圈的内容。 依照预设,/F 会从每个档案的每一行传送第一个以空格分隔的权 杖。空白行会被略过。您可以指定选择性的 "options" 参数来覆写 预设的剖析行为。这是有引号的字串,包含一或多个指定不同剖析 选项的关键字。关键字是: eol=c - 指定一个行尾注解字元 (只有一个) skip=n - 指定在档案开头要略过的行数。 delims=xxx - 指定分隔符号集。这会取代预设的空格 与定位字元的分隔符号集。 tokens=x,y,m-n - 指定每一行的哪些语法应该被传到 for 的内部以进行每一个重复操作。这会造 成配置额外的变数名称。m-n 格式代表 一个范围,指定了第 m 个到第 n 个权 杖。如果 tokens= 字串的最後一个字 元是星号,则会配置一个额外的变数并 在最後一个语法被剖析後接收该行中的 其他文字。 usebackq - 指定新语义开始作用。其中反括号的字 串会被当作命令来执行,而单引号字串 是纯文字字串命令,并且允许使用双引 号来引用 file-set 中的档名。 以下是一个范例: FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k 这会剖析 myfile.txt 档案中的每一行,它不会去管以分号开头的行数 ,直接将第 2 个及第 3 个语法从每一行传到 for 主体,而其语法是 用逗号和/或空格分开的。请注意,for 主体陈述式参照 %i 以取得第 二个语法,参照 %j 以取得第三个语法,使用 %k 取得第三个语法之 後的剩余字串。因为档案名称含有空格,您必须用双引号来括住档案名 称。要这样使用双引号,您必须使用 usebackq 参数。否则双引号会被 解译成用来定义一般文字。 使用 %i 明白地在 for 陈述式中宣告,并透过 tokens= option 使用 %j 作暗示性的宣告。您可以藉由 tokens= line 来指定最多 26 个语 法,前提是它宣告的变数不能高於字母 'z' 或 'Z'。请记住,FOR 变 数是单一字元的,同时在任一时间内,您不能同时使用超过 52 个 FOR 变数。 您也可以使用 FOR /F 命令在立即字串中剖析逻辑,方法是将括弧之间的 file-set 变成一个引号字串。它会被视为从档案输入的单行,并加 以剖析。 最後,您可以使用 FOR /F 命令来剖析一个命令的输出。方法是将括弧 内的 file-set 变成单引号字串。它将被视为一个命令列,这个命令 行将会传到子 CMD.EXE,而输出将会被撷取到记忆体中,当成档案来分 析。所以下列的范例: FOR /F "delims==" %i IN ('set') DO @echo %i 将列举目前环境中的环境变数名称。 -- ˊ_▂▃▄▂_ˋ. ◣          ▅▅ ▅▅ ι●╮   ./◤_▂▃▄▂_◥ \'▊   HARUHI █████ <■┘   ◤◤◥█◥◥█Δ   ISM    By-gamejye ¢|\   ▌▌ζ(▏●‵◥′●)Ψ ▏           █    ⊿Δ    /|▋ |\ ▎         ハルヒ主义      ▄█ ◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界をいに盛り上げるための宫ハルヒの    --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.39.85
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1460277496.A.E18.html
1F:推 ya6101461014: 了解了 谢谢大大 223.140.124.55 04/11 15:56
2F:推 oscar60111: 推 长知识了 <_ _> 140.125.33.221 04/12 02:47







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP