中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 问题! 将某些文子代入到 任意文件中!
作者:
标题: 问题! 将某些文子代入到 任意文件中! 上一主题 | 下一主题
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『楼 主』:  问题! 将某些文子代入到 任意文件中!

要达到的目的是 将two导入到输入的txt文件中 下列代码到底有什么错?

@echo off
set /p file=
echo %file%|findstr /i "\.txt$">nul & goto one
:one
for /f %%i in ('%file%|findstr /i "\.txt$"') do set new = new%%i
@echo two >> "%new%"
pause >nul

2006-9-22 00:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 2 楼』:  

楼主的代码存在诸多问题, 修正无法写入代码如下:

@echo off
set /p file=
echo %file%|findstr /i "\.txt$" >nul && goto one
:one
for /f %%i in ('echo %file%^|findstr /i "\.txt$"') do  & set new=new%%i
echo two>>%new%
pause

[ Last edited by pengfei on 2006-9-22 at 00:46 ]



业精于勤而荒于嬉,形成于思而毁于随。
2006-9-22 00:33
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 3 楼』:  

1."echo %file%|findstr /i "\.txt$">nul & goto one"
这句多余,因为后面用的&号,而且没有其它的跳转语句,所以不论执行情况如何都会按顺序执行到标号one处,即使不存在这句也是一样。
2.“for /f %%i in ('%file%|findstr /i "\.txt$"') do set new = new%%i”
在for语句的in()部分,貌似应该为 echo %file% ^ findstr /i ".txt$"',即没有前面的echo,也没有|前面的转义符^
另外,由于没有启用延迟环境变量,set new=new%%i其实执行的结果应该为set new=%%i
不大明白你的意图,如果想把two写到文件中直接用echo two >> %file% 就可以了,如果需要对文件类型做出限制也不需要用到for,直接用findstr后面接&&跳转就行了。

2006-9-22 00:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 4 楼』:  

楼主代码第一个判断语句存在两个问题:
1. echo %file%|findstr /i "\.txt$">nul & goto one  这里无论输入的是否为文本文档都将跳转到 one;

2. echo %file%|findstr /i "\.txt$" >nul && goto one 虽然&&解决了错误就不执行, 但楼主这句下面就是执行代码, 所以还是无法达到要求的非txt文件就不执行写入操作的要求.

这里楼主的错误判断出了问题, 而用下面的for再次执行判断, 显然第一个判断就不没有存在的必要.

3. for /f %%i in ('echo %file%^|findstr /i "\.txt$"') do echo %%i  & set new=new%%i  如果楼主选用第一个判断, 这里就出现重复判断的毛病.

代码精简如下:
@echo off
set /p file=请输入:
echo %file:~-4%|findstr /i ".txt" >nul && goto start
echo 对不起, 您的输入有误, 即将退出...
pause
exit
:start
echo two>>new%file%
pause



业精于勤而荒于嬉,形成于思而毁于随。
2006-9-22 00:46
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  『第 2 楼』的代码和楼主的代码都存在一个逻辑错误:无论:one的上一句成功与否,都会执行:one之后的内容,因为CMD的执行是从上至下顺序执行的——如果其中没有跳转语句的话。修改之后的代码如下:
@echo off
:input
cls
set file=
set /p file=     请输入文本文件路径:
for %%i in ("%file%") do (
    echo %%~ai|find /i "d">nul && goto input
)
if /i not "%file:~-4%"==".txt" goto :input
echo %file%
set new=new%file%
echo two>>%new%
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-22 00:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 6 楼』:  

呵呵..原来这样...明白了.谢咯!~

2006-9-22 01:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: