Board logo

标题: [其他] 如何只用一行语句实现输出文字的同时将文字输出到文件? [打印本页]

作者: hertz1987    时间: 2008-9-8 22:01     标题: 如何只用一行语句实现输出文字的同时将文字输出到文件?

RT
我知道可以用两行语句解决,一行输出到屏幕,一行到文件,但是觉得这样写得很拖沓,请问诸位高手有什么方法可以用尽可能简练的语句实现在屏幕上输出一行字的同时,将该行字追加到文件的功能呢?
作者: Batcher    时间: 2008-9-8 22:09

  1. echo abc&&echo abc>1.txt
复制代码

作者: pusofalse    时间: 2008-9-8 22:12

  1. @echo off
  2. if "%~1" equ "" start/b cmd /c "%~fs0 a>>a.txt"
  3. echo test
  4. if "%~1" equ "" pause
复制代码

[ 本帖最后由 pusofalse 于 2008-9-8 23:48 编辑 ]
作者: hertz1987    时间: 2008-9-8 22:22

怪我说得不够明白,2楼的代码中abc出现了两次,如果要显示的文字很长很长,这样写就比较拖沓了,我希望能够在代码中文字只出现一次,大家能够指导下吗?
作者: pusofalse    时间: 2008-9-8 22:25     标题: 回复 4楼 的帖子

用我3楼的代码。通用的,把echo test换成其他命令试下,同样可以“实现输出文字的同时将文字输出到文件”
作者: hertz1987    时间: 2008-9-8 22:31

嗯,3L的方法很好很强大.至于代码是怎么实现的我再去研究,先在此谢过了!
作者: zqz0012005    时间: 2008-9-8 23:06

到目前我认为只用一行不复杂的代码似乎是做不到的

pusofalse的想法不错,稍微完善一下:start 加上选项 /b ,后面的“ &exit ”没必要

最好写成“函数”形式(估计楼主想在P中用到这个功能吧):
  1. :repeat
  2. if "%~1" equ "" (call :repeat argument)>a.txt
  3. echo msg
  4. rem if "%~1" equ "" pause
复制代码

[ 本帖最后由 zqz0012005 于 2008-9-8 23:07 编辑 ]
作者: hertz1987    时间: 2008-9-8 23:25

3L和7L的代码都已经完成了我想要达到的目的,可是对于2位的代码我还是看不懂.
我不是那种不懂得自己上网搜的人,实在是无奈百度对"%,~"等关键字进行了过滤,搜不到什么有效信息.现在我勉强明白
%~0指的是批处理文件自身的完整路径
%~fs0是路径使用短文件名
但是本人菜,对于这两份代码的实现原理还是不明白,恳请各位指教指教...
只是不想知其然而不知其所以然,希望大家指导指导.谢谢啦~
作者: Batcher    时间: 2008-9-8 23:31

楼主从何得知“%~0指的是批处理文件自身的完整路径”?
作者: pusofalse    时间: 2008-9-8 23:43     标题: 回复 7楼 的帖子

zqz兄所言极是,多谢指出。
但依兄弟的写法,效率会是个问题。
作者: w156445045    时间: 2008-9-14 23:53

@echo 哈哈!~~~~~~~~~~~~~~~~~>c:\哈哈.txt
这个不就是么~
作者: qq641255849    时间: 2008-9-15 18:30

楼上的太可爱了,有没有看清Lz要求?
作者: hertz1987    时间: 2008-9-17 19:01     标题: 回复 9楼 的帖子

回复9L
内容是在百度上搜的,链接如下
http://www.cn-dos.net/forum/blog ... d=103127&page=1
作者: Batcher    时间: 2008-9-17 20:57     标题: 回复 13楼 的帖子

你亲自测试没有?测试的代码和结果分别是什么?
作者: pusofalse    时间: 2008-9-17 21:46     标题: 回复 13楼 的帖子

%~0不同于%0
%~0与%0在某些特定的情况下也不会是“自身路径”
作者: rivercross    时间: 2008-11-3 16:47

我执行了3楼的代码
@echo off
if "%~1" equ "" start/b cmd /c "%~fs0 a>>a.txt"
mysoft.exe -i
if "%~1" equ "" pause
但是会报该服务已经安装过一次,给我感觉是mysoft.exe -i这个命令执行了2次,请问如何解决
作者: Batcher    时间: 2008-11-3 16:58     标题: 回复 16楼 的帖子

  1. @echo off
  2. if "%~1" equ "" start/b cmd /c "%~fs0 a>>a.txt"
  3. mysoft.exe -i 2>nul
  4. if "%~1" equ "" pause
复制代码

作者: rivercross    时间: 2008-11-3 19:08

请问这样这个命令实际上是执行几次呢?还有我为了把所有信息都输出实际上的代码是

if "%~1" equ "" start/b cmd /c "%~fs0 a>>a.txt 2>&1"
user /add
if "%~1" equ "" pause


原帖由 Batcher 于 2008-11-3 16:58 发表
@echo off
if "%~1" equ "" start/b cmd /c "%~fs0 a>>a.txt"
mysoft.exe -i 2>nul
if "%~1" equ "" pause

作者: Batcher    时间: 2008-11-3 19:26     标题: 回复 18楼 的帖子

::第一次
if "%~1" equ "" start/b cmd /c "%~fs0 a>>a.txt 2>&1"
::第二次
user /add
if "%~1" equ "" pause

作者: rivercross    时间: 2008-11-3 19:52

原帖由 Batcher 于 2008-11-3 19:26 发表


有没有办法只执行一次但是同时输出到显示屏和保存到文件中呢?
我的需求是 :要执行一个安装服务的BAT,但是只能执行一次。让用户看到CMD中显示的信息,并且出现PAUSE让用户退出。文件中的内容是用来做日志倒查的。

或者实在不行能不能输出到文件后再从文件中读取输出到显示屏上?
作者: pusofalse    时间: 2008-11-3 20:04     标题: 回复 20楼 的帖子

  1. @echo off
  2. mysoft.exe -i>tmp.txt
  3. type tmp.txt
  4. pause
复制代码
先输出到文件,然后将里面的内容type出来。。。但并不能“同时”进行。。。




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