写批处理时遇到的问题及解决方法


前几天写了一个批处理的小脚本,之前没接触过踩了几个坑,属于是 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