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

【分享】换行符在批处理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
复制代码
3

评分人数

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

TOP

学习了,以前一直是这样的:
  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!
复制代码

TOP

3# zm900612


你忘了 * ? 在 for %%a in (...)do ... 被解析为文件通配符,若当前目录找不到,%%a就成了空值,
  1. for %a in (?)do echo %a
  2. for %a in ("*")do echo %a
复制代码
不是一般的问题,不能显示出这个用法的优越性,如果你到了写函数的时候兴许能体会得到。

TOP

本帖最后由 plp626 于 2011-6-18 17:43 编辑

哦,不好意思,看错了你的代码,还以为你没注意过这个用法。

===============

3楼的代码:
莫非WIN7修复了?,XP下直接退出。

TOP

本帖最后由 applba 于 2011-6-18 17:59 编辑

插一楼,批处理怎么直接输入二进制的数字。
比如八进制是000123,16进制是0xabc3, 二进制怎么表示?

TOP

6# applba


二进制数字?没明白你说的

TOP

5# plp626

其实我是刚发完帖子就发现搞混了,马上改了的...

TOP

论坛原有一个用 换行符 作为替换内容的帖子。

TOP

6# applba


完全不相干的问题请单独发帖提问
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这个写的好是好可希看不懂有什么用呀?我复制到文本里面试下什么都没显视.

TOP

11# ab362425

作用和下面这段类似,只是避免了%str%中存在通配符时出现的错误
  1. @echo off
  2. set str=第一行 第二行 第三行
  3. for %%a in (%str%) do echo %%a
  4. pause
复制代码

TOP

返回列表