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

[文本处理] [已解决]批处理for /f语句怎样使tokens为变量?

我想创建文件名为1、2、3的三个内容不同的txt文件,
使用了如下代码
  1. @echo off
  2. for /l %%a in (1,1,3) do (
  3.       for /f "tokens=%%a" %%i in ("更无柳絮因风起 唯有葵花向日倾 有情芍药含春泪,无力蔷薇卧晓枝") do echo %%i >%%a.txt
  4. )
  5. pause
复制代码
结果显示
此时不应有 %a"。
此时不应有 %a"。
此时不应有 %a"。
请按任意键继续. . .


不知何故?怎样向tokens传递值呢?为什么提示的是不应有"%a"而不是双百分号"%%a"?

[ 本帖最后由 haitianguyan102 于 2010-11-15 18:55 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
独立小桥风满袖,平林新月人归后!

正用到这部分,,学习了
此人已死,有事烧纸。------亡灵物语

TOP

真是上火啊,给了解释,LZ也得试试啊,把问题弄了一圈,又回来了,

TOP

原来如此,长知识了  谢谢诸位!
独立小桥风满袖,平林新月人归后!

TOP

这个问题以前讨论过,可能说的不太详细,以至使一些新手产生了误解。
for 中的 tokens=  和  delims= 后面的数字可以使用变量但只能是用 %% 引用的变量 如 %n%
也就是说无法在复合语句中直接引用即时变量(包括for 本身的变量 %%i 等。。)
看下面几个例子
:
  1. @echo off&setlocal enabledelayedexpansion
  2. set var=错误 正确
  3. set n=2
  4. for /f "tokens=%n%" %%a in ("%var%") do echo 第一个代码 %%a
  5. echo;
  6. for /l %%l in (1 1 2) do (
  7.    for /f "tokens=%n%" %%a in ("%var%") do echo 第二个代码 %%a
  8. )
  9. echo;
  10. echo;
  11. echo;
  12. ::错误的
  13. for /f "tokens=!n!" %%a in ("%var%") do echo %%a
  14. echo;
  15. for %%i in (2) do (
  16.    for /f "tokens=%%i" %%a in ("%var%") do echo %%a
  17. )
  18. pause
复制代码
技术问题请到论坛发帖求助!

TOP

回复 8楼 的帖子

注意结合上下文理解,断章取义是不对的。

楼上给了解释。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

随风的原意可能是说不能这样写:“tokens=%%a”
tokens位于for和in之间,这之间只能有一个变量,这个变量是输入变量,和do后面的输出变量是统一一致的,不能有两个输入变量,更不能输入变量和输出变量前后不一致。
下面的写法是错误的:
1、输入变量和输出变量不一致:
  1. for %%a in (1) do echo %%i
复制代码
2、for和In之间同时存在两个“for形式的变量”——输入变量%%a和%%i,这是错误的:
  1. for %%a %%a in ("1111") do echo %%a
复制代码
如不将上一个for的变量%%a用SET转换成通用变量形式如 %var% 而直接在下一个for中使用是错误的,因为该for不晓得哪个才是当前正确的输入变量:
  1. for %%a in (1) do for /f   "tokens=%%a"   %%i  in  ("1 2 3 4") do echo %%i
复制代码
我忘记了是否存在特殊情况,也就是在for与in之间使用两个变量成立的情况,如果有似乎是以第一个作为当前for的变量的,且这个变量需与输出变量一致。(存疑)

[ 本帖最后由 cjiabing 于 2010-11-16 00:32 编辑 ]
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

不用 call 的形式, 而采用 %xx%的 形式也是可以的.

TOP

回复 7楼 的帖子

呵呵 你看看2楼提供的这个连接就知道了
http://bbs.bathome.net/viewthrea ... Bfor%2B%C7%B6%CC%D7
是这个帖子里的2楼说的
独立小桥风满袖,平林新月人归后!

TOP

回复 6楼 的帖子

哪个高人说的?你可以把他揪出来群殴。
我想很大可能是你自己理解有误(更可能是还没有到理解的程度)
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 5楼 的帖子

这也是高人说的,当然不包括"in"之前的%%i之类的,它只是对形式变量的引用。还有其它的也可以为变量么,愿闻高见
独立小桥风满袖,平林新月人归后!

TOP

原来在for和in之间的值不能为变量

胡说八道, 可以使用.不要误导人

TOP

原来在for和in之间的值不能为变量

谢谢 2楼,问题解决了
独立小桥风满袖,平林新月人归后!

TOP

LZ也可以外设一个变量,例如:
  1. set /p a=
  2. for "tokens=%a%" ……
复制代码
方式灵活多变,LZ可以自行尝试

TOP

TOP

返回列表