Board logo

标题: [ 新手练习 7 ] 批处理把所有输出都写入一个文件 [打印本页]

作者: wxcute    时间: 2008-11-18 21:00     标题: [ 新手练习 7 ] 批处理把所有输出都写入一个文件

添加代码把所有输出(包括正常输出和错误反馈)都写入一个文件如 a.txt。
可不按原输出信息的顺序。
要求是原代码行不能改动。
  1. echo 批处理之家
  2. Link2Bathome
  3. set/p=不要想当然,回到正途吧。<nul
  4. echo BBS.bathome.net
复制代码
方法不限。添加越少,得分越多。
上一题:[ 新手习题 6 ] 添加汉字行号
http://bbs.bathome.net/thread-2569-1-1.html

作者: hlzj88    时间: 2008-11-18 21:57

  1. @echo off
  2. >>1.txt echo echo 批处理之家
  3. >>1.txt echo Link2Bathome
  4. >>1.txt echo set/p=不要想当然,回到正途吧。^<nul
  5. >>1.txt echo echo BBS.bathome.net<nul
  6. pause
复制代码
刚发现一个问题,用 [code]会将上面的^<nul没有掉,
感觉是审题错了,已经占楼了,再抹也是个疤,索性不抹了,各位别笑话啊

[ 本帖最后由 hlzj88 于 2008-11-18 22:09 编辑 ]
作者: lhjoanna    时间: 2008-11-19 00:14

如果理解的没错应该是这样吧
  1. @echo off
  2. >info.txt echo 批处理之家
  3. 2>>info.txt Link2Bathome
  4. >>info.txt <nul set /p=不要想当然,回到正途吧。
  5. >>info.txt echo BBS.bathome.net
复制代码
没添加pause结果直接到info.txt中查看。

[ 本帖最后由 lhjoanna 于 2008-11-19 00:24 编辑 ]
作者: wxcute    时间: 2008-11-19 10:08     标题: 楼上两位都修改了原代码行,所以暂不得分。请看题目要求第三行

要求是原代码行不能改动。

就是要原封不动的写,可以上下添加代码。

==================================

还是给大伙加分吧,新手想到一点也不容易 ^_^ 加油。

[ 本帖最后由 wxcute 于 2008-11-19 12:07 编辑 ]
作者: Batcher    时间: 2008-11-19 10:13

一是需要经验的积累,二是需要对句柄和重定向等理论知识的掌握。
这个对于新人来说似乎有点难度哦^_^
作者: wxcute    时间: 2008-11-19 10:20

论坛就有例子,就像在野外生存一样,找得到的吃的的人才不会饿死。哈哈。
作者: stalker    时间: 2008-11-19 11:39

太难了,过段时间再来
找到一篇文章,不过不太懂,其中有半个答案,看懂拉我想就是整个拉

[ 本帖最后由 stalker 于 2008-11-19 11:48 编辑 ]
作者: sylovanas    时间: 2008-11-19 11:58

这样?

@FOR %%a in (
"echo 批处理之家"
"Link2Bathome"
"set/p=不要想当然,回到正途吧。<nul"
"echo BBS.bathome.net" ) DO %%~a>>a.txt 2>&1

我了解意思了.那这样不对

[ 本帖最后由 sylovanas 于 2008-11-19 12:02 编辑 ]
作者: sylovanas    时间: 2008-11-19 12:10

这样就好

  1. @(
  2. echo 批处理之家
  3. Link2Bathome
  4. set/p=不要想当然,回到正途吧。<nul
  5. echo BBS.bathome.net
  6. )>> a.txt 2>&1
复制代码

[ 本帖最后由 sylovanas 于 2008-11-19 12:35 编辑 ]
作者: stalker    时间: 2008-11-19 12:20

楼上真强大
@符号的作用是什么呢
取消本条命令的回显,想起来了,不好意思

[ 本帖最后由 stalker 于 2008-11-19 12:27 编辑 ]
作者: wxcute    时间: 2008-11-19 12:43

大家还可以想,虽然方法与 9  楼可能类似。
作者: stalker    时间: 2008-11-19 13:43

还有点问题,先发一下
  1. @echo off
  2. echo see mine>nul 3>a.txt 2>&3 5>a.txt
  3. echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net
复制代码

哇卡卡,这样就好拉
  1. @echo off
  2. echo see mine>nul 3>a.txt 2>&3 5>&3
  3. echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net
复制代码

不过我想知道上面那个为什么会有点问题呢

[ 本帖最后由 stalker 于 2008-11-19 13:57 编辑 ]
作者: BBCC    时间: 2008-11-19 17:45

  1. call :a>> a.txt 2>&1
  2. :a
  3. echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net
复制代码
这样行不?
作者: firewolf85    时间: 2008-12-7 19:13

  1. call :loop >>a.txt
  2. :loop
  3. echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net
复制代码
但是没有错误提示的那句
作者: Seter    时间: 2009-11-12 13:28

  1. @echo off&if 1%1==1 %0 1>t.txt 2>&1
  2. echo 批处理之家
  3. Link2Bathome
  4. set/p=不要想当然,回到正途吧。<nul
  5. echo BBS.bathome.net
复制代码
貌似会多一行...
作者: zgq0301    时间: 2009-11-12 15:42

  1. @echo off
  2. goto :b
  3. :a
  4. echo 批处理之家
  5. Link2Bathome
  6. set/p=不要想当然,回到正途吧。<nul
  7. echo BBS.bathome.net
  8. :b
  9. call :a>> a.txt 2>&1
  10. pause>nul
复制代码

作者: qq106942397    时间: 2010-7-28 21:40

  1. @echo off
  2. @echo off
  3. (echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net) 1>t.txt 2>&1
复制代码


[ 本帖最后由 qq106942397 于 2010-7-28 21:43 编辑 ]
作者: fish    时间: 2010-7-31 15:42

为了使代码具有良好的可读性、健壮性,实现高内聚、低耦合,我费尽脑汁历尽千辛万苦终于写成了,写的不好,各位前辈们别嘲笑我哈。。。
  1. @echo off
  2. set /a c+=1
  3. echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net
  7. if %c%==1 call %0 >>a.txt 2<&1
复制代码
如有错误,还请多多批评指正,晚辈不才,在此多谢了。。。
作者: leap    时间: 2010-9-2 12:47

各位代码中的2>&1
是啥含义 请告知谢谢
作者: vincentzhou    时间: 2011-1-1 00:17

  1. for /f "delims=" %%a in ('more +1 "%~nx0"') do (%%a >>a.txt)&(%%a 2>>a.txt)
  2. echo 批处理之家
  3. Link2Bathome
  4. set/p=不要想当然,回到正途吧。<nul
  5. echo BBS.bathome.net
复制代码

[ 本帖最后由 vincentzhou 于 2011-1-1 00:40 编辑 ]
作者: weichenxiehou    时间: 2011-1-4 16:07

@echo off
echo, 1>nul 3>a.txt
echo, 2>nul 4>&1
echo 批处理之家
Link2Bathome
set/p=不要想当然,回到正途吧。<nul
echo BBS.bathome.net
作者: hdfsvod    时间: 2011-3-8 04:25

我来看看 刚来 还不是很懂啊
作者: dennis1314    时间: 2011-3-9 08:54

修改了三楼的方案,加上" ^" 可以完整的输出>nul
@echo off
>a.txt echo 批处理之家
>>a.txt echo Link2Bathome
>>a.txt echo set /p=不要想当然,回到正途吧。^>nul
>>a.txt echo BBS.bathome.net
pause>nul
作者: common    时间: 2011-6-13 23:38

  1. echo echo 批处理之家 >>a.txt
  2. echo Link2Bathome >>a.txt
  3. echo set/p=不要想当然,回到正途吧。^<nul >>a.txt
  4. echo echo BBS.bathome.net >>a.txt
复制代码
不知道这样符合题目要求不
作者: Hello123World    时间: 2011-7-19 17:08

1# wxcute
  1. @echo off
  2. (
  3. echo echo 批处理之家
  4. echo Link2Bathome
  5. echo set/p=不要想当然,回到正途吧。^<nul
  6. echo echo BBS.bathome.net
  7. )>a.txt
  8. pause
复制代码

作者: scarcr    时间: 2011-8-4 11:21

回复 19# leap
我也看了半天纠结中。
查了一下,

2代表运行出错
>输出重定向
&1代表正确运行时输出的文件,这里是a.txt
连起来的意思是把运行错误的信息也输入到运行正确的输出文件中。
如果没有这段,那么前面的代码中运行出错的行将不会输出到a.txt
就是这样子的。
作者: 无知小菜鸟    时间: 2012-8-31 11:21

多看看果然好,有知道了一个2>&1的作用了,把标准错误重定向到标准输出,这样就能显示错误反馈信息了
作者: skynjupt    时间: 2013-4-25 23:41

  1. cd.>a.txt
  2. (
  3. echo 批处理之家
  4. Link2Bathome
  5. set/p=不要想当然,回到正途吧。<nul
  6. echo BBS.bathome.net
  7. ) 1>>a.txt 2>&1
复制代码

作者: 772074834    时间: 2023-4-25 10:14

@echo off
>a.txt (
echo 批处理之家
Link2Bathome
set/p=不要想当然,回到正途吧。<nul
echo BBS.bathome.net
)
作者: 772074834    时间: 2023-4-25 10:18

@echo off
call :sub > a.txt
:sub
echo 批处理之家
Link2Bathome
set/p=不要想当然,回到正途吧。<nul
echo BBS.bathome.net
作者: LTSC1809    时间: 2023-5-1 00:27

echo 批处理之家>>a.txt
Link2Bathome>>a.txt
set/p=不要想当然,回到正途吧。<nul>>a.txt
echo BBS.bathome.net>>a.txt




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2