标题: 【分享】换行符在批处理for/f中的特殊应用 [打印本页]
作者: plp626 时间: 2011-6-18 17:02 标题: 【分享】换行符在批处理for/f中的特殊应用
对于新手这个也许不是很实用,但我相信随着技术的提升,for/f 的这个特性有很大用途。- for /f "delims=" %%a in ("!string!")do ....
复制代码
这个for/f 语句是可以循环的,只是大家很少见到下面这种用法
今天有幸把原来我调试代码时误以为的bug加以总结:- @echo off&setlocal enabledelayedexpansion
- :: 获取换行符
- set LF=^
-
-
- set "str=$a=1; $b=<>; $c=a*b; $d=2**10"
- :: 以换行符为界定符,分别执行set赋值语句,并忽略变量名前的空格
- for /f "tokens=*" %%a in ("%str:;=!LF!%")do set %%a
- set $
- pause
复制代码
作者: plp626 时间: 2011-6-18 17:17
- for /f "delims=" %%a in (a.txt)do ....
复制代码
- for /f "delims=" %%a in ("string")do ....
复制代码
for /f 的这两个用法其实是一种,这里的a.txt和"string"都被统一解析为"文本流",如此便不难理解1楼那个换行符的作用。
作者: CrLf 时间: 2011-6-18 17:25
学习了,以前一直是这样的:- for /f "delims=" %%a in ("
- $a=1
- $b=x
- $c=a*b
- $d=2**10
- ")do set str=!str:;=%%~a!
复制代码
作者: plp626 时间: 2011-6-18 17:30
3# zm900612
你忘了 * ? 在 for %%a in (...)do ... 被解析为文件通配符,若当前目录找不到,%%a就成了空值,- for %a in (?)do echo %a
- for %a in ("*")do echo %a
复制代码
不是一般的问题,不能显示出这个用法的优越性,如果你到了写函数的时候兴许能体会得到。
作者: plp626 时间: 2011-6-18 17:33
本帖最后由 plp626 于 2011-6-18 17:43 编辑
哦,不好意思,看错了你的代码,还以为你没注意过这个用法。
===============
3楼的代码:
莫非WIN7修复了?,XP下直接退出。
作者: applba 时间: 2011-6-18 17:48
本帖最后由 applba 于 2011-6-18 17:59 编辑
插一楼,批处理怎么直接输入二进制的数字。
比如八进制是000123,16进制是0xabc3, 二进制怎么表示?
作者: plp626 时间: 2011-6-18 17:51
6# applba
二进制数字?没明白你说的
作者: CrLf 时间: 2011-6-18 18:19
5# plp626
其实我是刚发完帖子就发现搞混了,马上改了的...
作者: asnahu 时间: 2011-6-18 20:10
论坛原有一个用 换行符 作为替换内容的帖子。
作者: Batcher 时间: 2011-6-18 20:26
6# applba
完全不相干的问题请单独发帖提问
作者: ab362425 时间: 2011-6-24 13:00
这个写的好是好可希看不懂有什么用呀?我复制到文本里面试下什么都没显视.
作者: CrLf 时间: 2011-6-24 14:08
11# ab362425
作用和下面这段类似,只是避免了%str%中存在通配符时出现的错误
-
- @echo off
- set str=第一行 第二行 第三行
- for %%a in (%str%) do echo %%a
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |