![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-10 22:16 |
共 47,812 主题排行 / 349,915 发帖 / 今日 1 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]echo %%i %%j 1 >>ok.txt为什么会把1丢失了呢 |
| 可打印版本 5,834 / 22 |
| 第1楼 hhh246 | 发表于 2006-09-21 04:03 |
| 初级用户 发帖 31 积分 74 | |
|
[已结]echo %%i %%j 1 >>ok.txt为什么会把1丢失了呢 ------- 1.txt ------
154154 123 2006-9-19 4564567 321 2006-9-30 123 54 2006-10-20 for /f %%i in ('date/t') do set adate=%%i for /f "tokens=1,2,3" %%i in (1.txt) do if %%k == %adate% echo %%i %%j 1 >>ok.txt [ Last edited by HAT on 2008-10-15 at 23:48 ] |
|
| 第2楼 vkill | 发表于 2006-09-21 05:09 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
先看看你 %date/t% 是什么?
|
|
| 第3楼 electronixtar | 发表于 2006-09-21 08:11 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
>>ok.txt echo %%i %%j 1
1>>ok.txt会把标准输出写倒ok.txt。反正 > 或 >> 前不能有数字 |
|
| 第4楼 hhh246 | 发表于 2006-09-21 08:12 |
| 初级用户 发帖 31 积分 74 | |
Originally posted by he200377 at 2006-9-21 05:09: 当前日期 设置到变量 如 adate=2006-09-20 |
|
| 第5楼 hhh246 | 发表于 2006-09-21 08:15 |
| 初级用户 发帖 31 积分 74 | |
Originally posted by electronixtar at 2006-9-21 08:11: 去了1 也不行呀 |
|
| 第6楼 pengfei | 发表于 2006-09-21 09:09 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
根据楼主1.txt的内容修改代码如下:
@echo off setlocal enabledelayedexpansion for /f "tokens=1-3 delims=- " %%i in ('date/t') do ( set age=%%i set /a month=1%%j-100 set /a daily=1%%k-100 for /f "tokens=1,2,3" %%i in (1.txt) do ( if /i "%%k"=="!age!-!month!-!daily!" ( echo %%i %%j 1 >>ok.txt ) ) ) 问题出在格式上, 导致if语句判断出错不能执行重定向. |
|
| 第7楼 namejm | 发表于 2006-09-21 09:15 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
%date%的格式是 2006-09-19,而非1.txt中的2006-9-19,所以,你的代码中,if语句无论如何都不能成立;
另外,echo %%i %%j 1 >>ok.txt的格式是错误的,最后的1被CMD认为是句柄值,会导致没有任何内容输入到ok.txt。electronixtar 在『第 3 楼』所说的:> 或 >> 前不能有数字 一句是不够准确的,准确的说法是:如果echo最后一列的数字是0~9中的任何一个数字,将不会把内容写入ok.txt中。 |
|
| 第8楼 hhh246 | 发表于 2006-09-21 09:15 |
| 初级用户 发帖 31 积分 74 | |
|
真高手,已解决
|
|
| 第9楼 pengfei | 发表于 2006-09-21 09:22 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
另外,echo %%i %%j 1 >>ok.txt的格式是错误 ... [/quote]
好像并没有飞扬兄说的这种错误, 如果0-9是单独的将会认为是句柄, 而这个重定向前跟了几个值, 所以不会出现兄所说的这种情况! |
|
| 第10楼 namejm | 发表于 2006-09-21 09:29 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
我所说的错误,并非执行的时候会出错,而是说写到ok.txt中的内容并非你想要的完整内容,比如,你可以运行语句 echo 123 1>ok.txt 试试,在ok.txt中并不是你想要的 123 1,而是 123,少了最后一列的数字1。
|
|
| 第11楼 hhh246 | 发表于 2006-09-21 09:30 |
| 初级用户 发帖 31 积分 74 | |
|
多试过1 后加一个空格可以解决
|
|
| 第12楼 pengfei | 发表于 2006-09-21 09:33 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
呵呵~ namejm兄说的对.
楼主的后面加空格解决了无法重定向问题... |
|
| 第13楼 namejm | 发表于 2006-09-21 09:47 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
如果要求不是太苛刻的话,是可以在最后一列的数字后加个空格来避免CMD的识别问题,但是,如果要求非常苛刻的话,比如要求最后一列数字的0~9写到文本中之后,后面不带空格的话,就应该对echo语句作一些处理,换成下列写法中的任意一种:
另外,还可以用 echo ^内容>test.txt的格式,但是这个写法有很大的局限性,即转义符^只能加在内容最后一列的单个的0~9前面,如果是 echo ^123 1>test.txt 的写法,还是不成,要写成 echo 123 ^1>test.txt才可以。 |
|
| 第14楼 pengfei | 发表于 2006-09-21 09:49 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
是的, 出现这种情况尽量用字符转义...
|
|
| 第15楼 electronixtar | 发表于 2006-09-21 10:35 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
可以用 "" 来转义——在ntcmds.chm上看到的
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |