中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 03:32
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » 问题! 将某些文子代入到 任意文件中!
可打印版本  1,252 / 5
第1楼 kennyfan 发表于 2006-09-22 00:19
中级用户 发帖 112 积分 259
问题! 将某些文子代入到 任意文件中!
要达到的目的是 将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
第2楼 pengfei 发表于 2006-09-22 00:33
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
楼主的代码存在诸多问题, 修正无法写入代码如下:

@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 ]
第3楼 3742668 发表于 2006-09-22 00:41
荣誉版主 发帖 718 积分 2,013
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后面接&&跳转就行了。
第4楼 pengfei 发表于 2006-09-22 00:46
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
楼主代码第一个判断语句存在两个问题:
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
第5楼 namejm 发表于 2006-09-22 00:50
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  『第 2 楼』的代码和楼主的代码都存在一个逻辑错误:无论:one的上一句成功与否,都会执行:one之后的内容,因为CMD的执行是从上至下顺序执行的——如果其中没有跳转语句的话。修改之后的代码如下:
第6楼 kennyfan 发表于 2006-09-22 01:09
中级用户 发帖 112 积分 259
呵呵..原来这样...明白了.谢咯!~
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023