找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34317|回复: 14

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

[复制链接]
发表于 2010-11-15 17:01:27 | 显示全部楼层 |阅读模式
我想创建文件名为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 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2010-11-15 17:28:07 | 显示全部楼层
发表于 2010-11-15 17:43:48 | 显示全部楼层
LZ也可以外设一个变量,例如:
  1. set /p a=
  2. for "tokens=%a%" ……
复制代码
方式灵活多变,LZ可以自行尝试
 楼主| 发表于 2010-11-15 18:54:50 | 显示全部楼层

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

谢谢 2楼,问题解决了
发表于 2010-11-15 19:14:40 | 显示全部楼层
原来在for和in之间的值不能为变量

胡说八道, 可以使用.不要误导人
 楼主| 发表于 2010-11-15 21:09:49 | 显示全部楼层

回复 5楼 的帖子

这也是高人说的,当然不包括"in"之前的%%i之类的,它只是对形式变量的引用。还有其它的也可以为变量么,愿闻高见
发表于 2010-11-15 22:24:44 | 显示全部楼层

回复 6楼 的帖子

哪个高人说的?你可以把他揪出来群殴。
我想很大可能是你自己理解有误(更可能是还没有到理解的程度)
 楼主| 发表于 2010-11-15 22:55:13 | 显示全部楼层

回复 7楼 的帖子

呵呵 你看看2楼提供的这个连接就知道了
http://bbs.bathome.net/viewthrea ... Bfor%2B%C7%B6%CC%D7
是这个帖子里的2楼说的
发表于 2010-11-15 23:08:10 | 显示全部楼层
不用 call 的形式, 而采用 %xx%的 形式也是可以的.
发表于 2010-11-15 23:51:03 | 显示全部楼层
随风的原意可能是说不能这样写:“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 编辑 ]
发表于 2010-11-16 00:05:59 | 显示全部楼层

回复 8楼 的帖子

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

楼上给了解释。
发表于 2010-11-16 01:15:13 | 显示全部楼层
这个问题以前讨论过,可能说的不太详细,以至使一些新手产生了误解。
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
复制代码
 楼主| 发表于 2010-11-16 18:23:23 | 显示全部楼层
原来如此,长知识了  谢谢诸位!
发表于 2010-11-17 00:16:45 | 显示全部楼层
真是上火啊,给了解释,LZ也得试试啊,把问题弄了一圈,又回来了,
发表于 2011-12-31 00:42:52 | 显示全部楼层
正用到这部分,,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:21 , Processed in 0.021637 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表