中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 20:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]echo %%i %%j 1 >>ok.txt为什么会把1丢失了呢
楼 主 [已结]echo %%i %%j 1 >>ok.txt为什么会把1丢失了呢 发表于 2006-09-21 04:03 ·  中国 广东 江门 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
------- 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 发表于 2006-09-21 05:09 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
先看看你 %date/t% 是什么?
3 发表于 2006-09-21 08:11 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
>>ok.txt echo %%i %%j 1

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

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
4 发表于 2006-09-21 08:12 ·  中国 广东 江门 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
Originally posted by he200377 at 2006-9-21 05:09:
先看看你 %date/t% 是什么?



当前日期 设置到变量 如 adate=2006-09-20
5 发表于 2006-09-21 08:15 ·  中国 广东 江门 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
Originally posted by electronixtar at 2006-9-21 08:11:
>>ok.txt echo %%i %%j 1

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



去了1 也不行呀
6 发表于 2006-09-21 09:09 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
根据楼主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 发表于 2006-09-21 09:15 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  %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中
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
8 发表于 2006-09-21 09:15 ·  中国 广东 江门 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
真高手,已解决
9 发表于 2006-09-21 09:22 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
  另外,echo %%i %%j 1 >>ok.txt的格式是错误 ... [/quote]

好像并没有飞扬兄说的这种错误, 如果0-9是单独的将会认为是句柄, 而这个重定向前跟了几个值, 所以不会出现兄所说的这种情况!
业精于勤而荒于嬉,形成于思而毁于随。
10 发表于 2006-09-21 09:29 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  我所说的错误,并非执行的时候会出错,而是说写到ok.txt中的内容并非你想要的完整内容,比如,你可以运行语句 echo 123 1>ok.txt 试试,在ok.txt中并不是你想要的 123 1,而是 123,少了最后一列的数字1。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
11 发表于 2006-09-21 09:30 ·  中国 广东 江门 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
多试过1 后加一个空格可以解决
12 发表于 2006-09-21 09:33 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
呵呵~ namejm兄说的对.

楼主的后面加空格解决了无法重定向问题...
业精于勤而荒于嬉,形成于思而毁于随。
13 发表于 2006-09-21 09:47 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  如果要求不是太苛刻的话,是可以在最后一列的数字后加个空格来避免CMD的识别问题,但是,如果要求非常苛刻的话,比如要求最后一列数字的0~9写到文本中之后,后面不带空格的话,就应该对echo语句作一些处理,换成下列写法中的任意一种:

  1、(echo 内容)>test.txt
  2、>test.txt echo 内容

  另外,还可以用 echo ^内容>test.txt的格式,但是这个写法有很大的局限性,即转义符^只能加在内容最后一列的单个的0~9前面,如果是 echo ^123 1>test.txt 的写法,还是不成,要写成 echo 123 ^1>test.txt才可以。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
14 发表于 2006-09-21 09:49 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
是的, 出现这种情况尽量用字符转义...
业精于勤而荒于嬉,形成于思而毁于随。
15 发表于 2006-09-21 10:35 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
可以用 "" 来转义——在ntcmds.chm上看到的

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
论坛跳转: