返回列表 发帖

【分享】换行符在批处理for/f中的特殊应用

对于新手这个也许不是很实用,但我相信随着技术的提升,for/f 的这个特性有很大用途。
for /f "delims=" %%a in ("!string!")do ....COPY
这个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 $
pauseCOPY
3

评分人数

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

TOP

学习了,以前一直是这样的:
for /f "delims=" %%a in ("
   $a=1
   $b=x
   $c=a*b
   $d=2**10
")do set str=!str:;=%%~a!COPY

TOP

3# zm900612


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

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%中存在通配符时出现的错误
@echo off
set str=第一行 第二行 第三行
for %%a in (%str%) do echo %%a
pauseCOPY

TOP

返回列表