Board logo

标题: 【分享】换行符在批处理for/f中的特殊应用 [打印本页]

作者: plp626    时间: 2011-6-18 17:02     标题: 【分享】换行符在批处理for/f中的特殊应用

对于新手这个也许不是很实用,但我相信随着技术的提升,for/f 的这个特性有很大用途。
  1. for /f "delims=" %%a in ("!string!")do ....
复制代码
这个for/f 语句是可以循环的,只是大家很少见到下面这种用法
今天有幸把原来我调试代码时误以为的bug加以总结:
  1. @echo off&setlocal enabledelayedexpansion
  2. :: 获取换行符
  3. set LF=^
  4. set "str=$a=1; $b=<>; $c=a*b; $d=2**10"
  5. :: 以换行符为界定符,分别执行set赋值语句,并忽略变量名前的空格
  6. for /f "tokens=*" %%a in ("%str:;=!LF!%")do set %%a
  7. set $
  8. pause
复制代码

作者: plp626    时间: 2011-6-18 17:17

  1. for /f "delims=" %%a in (a.txt)do ....
复制代码
  1. for /f "delims=" %%a in ("string")do ....
复制代码
for /f 的这两个用法其实是一种,这里的a.txt和"string"都被统一解析为"文本流",如此便不难理解1楼那个换行符的作用。
作者: CrLf    时间: 2011-6-18 17:25

学习了,以前一直是这样的:
  1. for /f "delims=" %%a in ("
  2.    $a=1
  3.    $b=x
  4.    $c=a*b
  5.    $d=2**10
  6. ")do set str=!str:;=%%~a!
复制代码

作者: plp626    时间: 2011-6-18 17:30

3# zm900612


你忘了 * ? 在 for %%a in (...)do ... 被解析为文件通配符,若当前目录找不到,%%a就成了空值,
  1. for %a in (?)do echo %a
  2. 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%中存在通配符时出现的错误
  1. @echo off
  2. set str=第一行 第二行 第三行
  3. for %%a in (%str%) do echo %%a
  4. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2