中国DOS联盟论坛

中国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:
先看看你 %date/t% 是什么?



当前日期 设置到变量 如 adate=2006-09-20
第5楼 hhh246 发表于 2006-09-21 08:15
初级用户 发帖 31 积分 74
Originally posted by electronixtar at 2006-9-21 08:11:
>>ok.txt echo %%i %%j 1

1>>ok.txt会把标准输出写倒ok.txt。反正 > 或 >> 前不能有数字



去了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