写批处理时遇到的问题及解决方法
前几天写了一个批处理的小脚本,之前没接触过踩了几个坑,属于是 fuzz 编程了:)
一、bat 运行错误弹出黑框提示
脚本需要执行一些命令,但是有的命令无法获取返回信息,此时 bat 运行错误会弹出黑框提示。
解决方法:
脚本最前面加几行代码
if "%1"=="hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit :CmdBegin
二、关闭所有命令(包括本身这条命令)的回显
@echo off
三、控制台结果不能直接赋值给变量
bat 的变量在直接获取控制台命令回显时不支持换行,只可以获取第一行或最后一行,并且 bat 变量最多只可以存储 8190 个字符,所以这里使用数组获取命令执行结果,需要先启用延迟环境变量扩展
setlocal EnableDelayedExpansion set "cpu_cnt=0" for /F "delims=" %%f in ('wmic cpu get name ^, processorid') do ( set /a cpu_cnt+=1 set "cpu[!cpu_cnt!]=%%f" ) (for /L %%n in (1 1 !cpu_cnt!) DO echo !cpu[%%n]!)
四、cmd 下运行 powershell 命令
PowerShell -Command "& {powershell 命令}"
五、windows 下计算文件 md5 值
win10 以下两种方法都可以,但是测试时发现 win7 第二种方法不适用
1.certutil -hashfile C:\Windows\Temp\1.txt MD5 2.PowerShell -Command "& {Get-FileHash C:\Windows\Temp\1.txt -Algorithm MD5| Format-List}"
参考文章:
https://blog.csdn.net/weixin_42929607/article/details/109293145
https://www.thinbug.com/q/31035636