中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-16 06:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 控制台如何自动记录所有输入过的命令并输出到文件? 查看 2,035 回复 5
楼 主 控制台如何自动记录所有输入过的命令并输出到文件? 发表于 2005-12-02 17:42 ·  中国 北京 鹏博士BGP
新手上路
积分 18
发帖 5
注册 2005-11-30 14:07
UID 46224
状态 离线
假如我打开一个控制台,无论我在里面作过什么操作,我都希望将操作记录跟踪下来并最终写入到一个文件中。举个例子来说,我在控制台作了如下操作:

C:\>set value=1

C:\>Change_Value.bat

C:\>echo 1
1

C:\>set value=2

C:\>echo 2
2

C:\>set value=3

C:\>%value%
'3' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\>

那么最后在我退出控制台的时候我要将上面所有运行过的命令保存在一个文件中,比如说是Command.log。文件中记录的内容假如是:
set value=1
Change_Value.bat
echo 1
set value=2
echo 2
set value=3
%value%

请问有没有什么好的办法?我们现在的做法是在每条命令下面都写一个echo,然后将其上的命令重复一遍写在echo后面。这种办法很笨,而且也容易出错。各位大侠给支支招!
2 发表于 2005-12-02 22:48 ·  中国 辽宁 锦州 中移铁通
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
UID 40733
性别 男
状态 离线
按 F7 看看,然后将这些命令复制出来。
  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

3 发表于 2005-12-05 09:34 ·  中国 北京 鹏博士BGP
新手上路
积分 18
发帖 5
注册 2005-11-30 14:07
UID 46224
状态 离线
这样还是达不到我的目的噢!我是要做一个bat文件,然后想在bat文件执行完了以后输出所有执行过的命令,可我把doskey /h写在bat文件的最后一行却什么也没有输出,好像是bat文件里的命令都记录不下来,苦恼啊!大家还有什么办法么?
4 发表于 2005-12-05 13:48 ·  中国 山西 太原 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re tuliplanet:

很有趣的一个题目,根据你的要求我写了下面这段 BatDump 代码,它只能 Dump 一些简单的批处理,遇到某些复杂的批处理时,会有许多意想不到的问题,毕竟它不是程序的正常执行流程。另外,如果待 Dump 的批处理中含有 pause 等需要接受键盘输入的语句,Dump 过程中需要“摸黑”进行选择确定(CMD中的情况比较特殊)。


:: BatDump.bat - V2 - Dump process of batch program
:: Will Sort - 2005-12-06 - CMD@WinXP/MSDOS7.10/MSDOS6.22
@echo off
if not "%1"=="" if exist %1.bat goto Dump

:Usage
echo.
echo BatDump - Dump process of batch program
echo Usage: %0 batname(without extname)
echo Sample: %0 test
echo.
goto end

ump
ren %1.bat %1.bak
echo @echo off>%1.bat
echo set prompt=# >>%1.bat
echo echo on>> %1.bat
find /v "echo off" < %1.bak >> %1.bat
shift
%comspec% /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 | find "#"
if exist %0.bat del %0.bat
ren %0.bak %0.bat

:end
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
5 发表于 2005-12-05 16:45 ·  中国 北京 鹏博士BGP
新手上路
积分 18
发帖 5
注册 2005-11-30 14:07
UID 46224
状态 离线
嗯~~!大侠的这个意思是说把bat文件的命令全都拷贝了一遍到一个文件,而我们要得到的是真正这个bat文件中在运行时都运行了那些命令,不如运行的时候有一些if else语句,和goto语句,有些分支是没走的,我们要记录bat运行的状态,而不是那里面有什么。所以,大侠们看看还有没有别的高招噢?
6 发表于 2005-12-05 18:30 ·  中国 山西 临汾 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re tuliplanet:

不知你是如何测试我的代码的?它的作用正是获取一个批处理的运行语句序列,因此,用它截取出来的文本已不再算是一个严格意义上的批处理文件了。比如,这个文本中只会有 goto label ,而不会有 :label 这个标签了。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
论坛跳转: