问题背景:想让所有命令都自动显示 所费时间
cmd没有alias,但有doskey(多年没有用,一搜才想起以前用的很多的)
没有计算时间差的命令,命令前后自动显示当前时间也行
所以写了 doskey r=echo %time%[ $T $* $T echo ]%time%
但实际使用 r dir \ 时,发现%time%是 doskey设置r(a时刻)时的时间,而不是我希望的执行r dir \(b时刻)的时间。。。。
即百分号在doskey设置时就被解释替换了。。。。
如何能让百分号保留到b时刻才解释替换?
显示命令执行结束时的时间,可以通过 prompt 命令修改命令提示符来实现。比如,默认的命令提示符是:
C:\>
可以使用 prompt $t$g 的形式将其替换为其他形式。比如:
C:\>prompt$t$g
20:18:15.92>
可以看到,执行上述命令后,命令提示符已经变成了 时:分:秒> 的格式。这个时间是该命令提示符出现的时间,也可以理解为,上一个命令执行结束的时间。比如:
20:20:37.86>dir
驱动器 C 中的卷没有标签。
卷的序列号是 3AFD-BD9C
C:\ 的目录
2024/05/27 10:03 87 diskpart.script
2024/12/04 19:46 <DIR> DOWNLOADS
2024/12/04 17:36 <DIR> Intel
2019/12/07 17:14 <DIR> PerfLogs
2024/12/04 18:12 <DIR> Program Files
2024/12/04 17:56 <DIR> Program Files (x86)
2023/03/30 09:51 <DIR> setup
2023/03/29 17:44 <DIR> Users
2024/08/30 10:02 <DIR> Windows
1 个文件 87 字节
8 个目录 89,289,539,584 可用字节
20:20:40.43>
如果想进一步自定义命令提示符,可以执行 prompt /? 查看操作指南。
参考资料:
装个clink+oh-my-posh/starship。
嗯,看来提示符更简单有效。
记得大学里写过prompt的什么技巧发表过一页的,居然忘了它。。。。
但是,这个方法不能记录命令开始执行的时间,换言之,可能还是无法计算程序运行所需的准确时间。
要记录开始时间,我目前能想到的就是在要执行的命令前面加一个 echo %time% &,比如:
22:04:22.60> echo %time% & dir
22:04:42.88
驱动器 C 中的卷没有标签。
卷的序列号是 3AFD-BD9C
C:\Users\lib 的目录
2024/12/04 18:34 <DIR> .
2024/12/04 18:34 <DIR> ..
2024/12/04 18:35 35 .ash_history
2024/12/04 17:41 <DIR> .ipython
2024/12/04 17:47 <DIR> .jupyter
2024/12/04 18:34 <DIR> .matplotlib
2024/12/04 18:15 560 .viminfo
2023/03/29 17:26 <DIR> 3D Objects
2023/03/29 17:26 <DIR> Contacts
2024/12/04 19:41 <DIR> Desktop
2024/12/04 18:13 <DIR> Documents
2024/01/08 15:27 <DIR> Downloads
2023/03/29 17:26 <DIR> Favorites
2023/03/29 17:26 <DIR> Links
2023/03/29 17:26 <DIR> Music
2023/03/29 17:31 <DIR> OneDrive
2024/01/08 15:20 <DIR> Pictures
2023/03/29 17:26 <DIR> Saved Games
2023/03/29 17:28 <DIR> Searches
2023/04/07 10:42 <DIR> Videos
2 个文件 595 字节
18 个目录 89,145,417,728 可用字节
22:04:42.89>
绕得太远了。。。。doskey都有点绕了
不过doskey怎么使用%、转义规则 还是没,好像它的说明都没提
doskey可以自动给任何命令前后 加 额外命令,
只是额外命令里的环境变量是 加的时候 就替换了,而不是执行时才替换。
想到一个变通办法是把 echo %time%写进一个小bat,额外命令是运行这个小bat。不过prompt比doskey简单很多(唯一缺点是 如果命令输出很多行时,前的prompt时间信息被覆盖看不到了。每次执行需要计时的命令,先多敲一次回车)。
最准确也不计成本的做法:前的命令 记录当前时间到临时文件x,后的命令 执行一个算时间的程序(读入x文件,用当前时间减之,输出时间间隔)
nushell吧,这个不远。 powershell也行呀,说真的如果是linux用户这个都是基操,美化以下shell而已,微软的cmd没办法太过DIY。
你不知道老系统的痛苦。
2015年安装的win7,任何安装程序都无法运行了,包括更新powershell的版本,所以仿linux的网络下载安装平台就不会有了。
一台2017年的Win10,刚刚想写个按上面思路读写环境变量计算时间差的程序,发现hlp文件无法正确打开,需要安装winhlp32.exe的补丁,下载了这个补丁,运行它只有好几分钟的正在更新,最后是失败。。。。
真的服了现在的微软
最后还是写了读环境变量计算时间差的exe,把doskey的方法实现了,
还需要2个bat
启动cmd窗口自动一次性执行的设置bat
@echo off
prompt $t $p$g
z:
if exist z:\runtime.exe goto a
copy d:\install\runtime.exe z:\
copy d:\install\runtimeb.bat z:\
:a
doskey r=z:\runtimeb.bat $T $* $T z:\runtime.exe
每次执行前自动运行的runtimeb.bat
@echo off
set runtimeb=%time%
使用效果:
2024年12月05日 22:24 <DIR> Windows
1 个文件 1,024 字节
20 个目录 34,227,974,144 可用字节
23:44:00.21 Z:\>b=23:44:00.19
e=23:44:00.231
used=00:00:00.041
23:44:00.23 Z:\>