当前位置: 首页 > news >正文

Windows批处理进阶使用教程

Windows批处理是真的难用,可以感受到这个脚本解释器非常烂,写吐了。

@echo off

用来关闭后续所有命令的回显.
@ 符号:禁止当前行自身的回显(即避免 echo off 这一行也被显示)

@echo off
echo Hello World
pause

运行上述脚本时,会看到:

Hello World
Press any key to continue...

@echo on:开启回显,需要debug的时候,可以把off改成on,看看具体是哪一行出问题。

设置字符编码为 UTF-8

chcp 65001 >nul

chcp 是改变控制台的代码页的命令,65001是 UTF-8 编码的代码页。

这行命令将命令提示符窗口的字符编码设置为UTF-8,以确保支持中文或其他多字节字符。如果不加这行,默认的编码基本上就是ASCII编码码。

nul 是为了将 chcp 命令的输出隐藏,不显示在控制台。

延迟变量扩展(重点)

setlocal enabledelayedexpansion

变量的值通常会在命令执行时被解析。如果启用延迟扩展,变量会在命令执行时动态解析。这对于在循环或条件语句中使用变量时特别有用。
这个要配合 !变量!,一起使用,原本是%变量%
如果没有加 !,批处理在运行时,会把%变量%当作是硬编码直接执行。

举例:

@echo off
setlocal enabledelayedexpansion
set /p var=请选择:
if %var% EQU 1 (echo "123"
)

这样会直接跳过,因为用的是%var%
正确写法是让变量会在命令执行时动态解析:

@echo off
setlocal enabledelayedexpansion
set /p var=请选择:
if !var! EQU 1 (echo "123"
)

设置控制台颜色

color 0F

color 0F 设置命令提示符窗口的文本颜色和背景颜色。
0 是黑色背景。
F 是白色文本。

注释

批处理中的注释就是坏家伙,即使是注释,批处理也会解析这一行,在循环中使用会影响性能。
常见注释方式:
1、 REM - 标准注释
2、 :: - 双冒号注释(实际是无效标签),代码块中不能用双冒号,双冒号只能在代码块外使用

坑:
1、注释中的特殊字符:
REM 这个注释包含 > 重定向符号会出问题
REM 使用 &、 |、 : 、:(中文的:)符号也会被解析
REM 使用 ^> 转义后也不一定会安全

有个我不理解的,就是为什么使用 :也会被解析成变量,使用 ^ 转义也没有用。

日志

:LogInfo
REM Function - Output info level log (white)
cls
echo [信息] %~1
goto :eof:LogSuccess
REM Function - Output success level log (green)
cls
powershell -c "Write-Host '[成功] %~1' -ForegroundColor Green"
goto :eof:LogWarning
REM Function - Output warning level log (yellow)
cls
powershell -c "Write-Host '[警告] %~1' -ForegroundColor Yellow"
goto :eof:LogError
REM Function - Output error level log (red)
cls
powershell -c "Write-Host '[错误] %~1' -ForegroundColor Red"
goto :eof

使用方法:

call :LogInfo "%LANG_DETECTED%: !SELECTED_LANG_DISPLAY!"

调用其他脚本

问题现象

通过批处理调用 VBS 或 PowerShell 后台执行其他软件时,软件运行几秒就自动退出,但手动启动正常。
这个问题我还没有解决,也不理解为什么,于是我当作是bash的BUG把程序搞挂了。

我能想到的方式全部都试过了,结局是都是运行几秒后就退出,或者是程序控制台弹窗没有隐藏。

如果有大佬可以做到,隐藏程序的控制台弹窗(不是在编译选项禁用程序的控制台),并且可以用bat启动,在bat关闭后程序能够正常运行,请指导我。

曲线救国

echo Set WshShell = CreateObject^(^"WScript.Shell^"^) > "temp.vbs"
echo WshShell.Run ^"temp.exe^", 0, False >> "temp.vbs"

最后由用户,自己手动执行 temp.vbs来启动程序,

http://www.dtcms.com/a/449638.html

相关文章:

  • 中秋佳节与 Java 的奇妙联想
  • 评委打分算法解析:从基础实现到性能优化(洛谷)
  • k8s中Pod和Node的故事(2):优先级、抢占和驱逐
  • 网站架构包含哪几部分苏州网站建设网站制作的公司
  • UML笔记 之 事物和关系
  • 中国黄金集团建设有限公司官方网站照片在线编辑
  • 从零开始学习Python Django:从环境搭建到第一个 Web 应用
  • Lenovo XiaoXin Pro13 i5-10210U_i7-10710U 黑苹果 EFI
  • 网站建设服务商24小时接单移动应用开发专业学什么
  • 从 0 到 PB 级存储:MinIO 分布式文件系统实战指南与架构解密
  • [人工智能-综述-23]:AI的硬件层以及组成架构、GPU内部以及组成架构
  • 营销型企业网站分pageadmincms
  • JDK安装操作命令(linux)
  • UNIX下C语言编程与实践39-UNIX 定时器:alarm 函数与 setitimer 函数的使用与对比
  • 18款禁用网站app全部用asp.net 做网站
  • 对比网站中国最大免费wap网站
  • 虚拟麦克风驱动下载
  • 算法题(227):回文字符串
  • 框架--SpringBoot
  • STM32F103 MPU6500 DMP库姿态解算
  • 使用第三方库
  • 腾讯企业邮箱登录入口app云优化seo软件
  • 【操作系统-Day 40】文件的“身份证”:深入解析文件定义、属性与核心操作
  • 磁共振成像原理(理论)19:基本成像原理 (Basic Imaging Methods) - 三维成像
  • 线程池——线程池
  • WebSocket细谈
  • 公司网站怎么建站微网站如何做微信支付宝支付
  • Ubuntu 原地升级 MongoDB 全攻略
  • 网站变灰色代码安徽省建设工程信息网官网是什么网站
  • Hexo博客搭建系列(四):透明居中导航栏+鼠标悬停放大效果