- utf-8乱码问题">utf-8乱码问题
 - cd到其他盘符
 - /d 是重点,不加就进不去其他盘符
 - 目录相关
 - 参考">文件相关参考
 - 延迟
 - 大概是睡20秒 👈 -n 20 值发送20个数据包
 - 获取键盘输入值
 - @echo off
 - windows服务
 - sc create 注册 [ start=auto 默认是demand(手动)]
 - sc delete 删除
 - sc query 查询
 - 自动以管理员模式打开
 - 跳转行
 - 根据端口查询PID
 - 根据PID终止进程
 - 查询本机MAC
 - for循环
 - pause 暂停
 - 搜索
 - 获取命令行传递的参数
 - 进入wsl系统的目录
 - 跟Linux 中的 ls 相似的命令
 - 查看当前路径
 - Bat中关闭快速编辑模式
 - 将字符串输出到Windows剪贴板
 - 重命名
 
utf-8乱码问题
在bat中加入 CHCP 65001
e.g  utf-8编辑模式下
CHCP 65001@echo off@echo 根据端口关闭进程
cd到其他盘符
/d 是重点,不加就进不去其他盘符
- 印象中有没有在 e盘 输入 cd f://xx/xx 之后 还需要在输入 f: 才能进入其他盘
 cd /d E:\tan\bat
目录相关
当前盘符:%~d0 当前盘符和路径:%~dp0 当前盘符和路径的短文件名格式:%~sdp0 当前批处理全路径:%~f0 当前CMD默认目录:%cd% 当前CMD默认目录:%cd% 单斜杠路径变双斜杠: set v=%~sdp0 && %v:\=\%
文件相关参考
@echo offfor /f %%a in ('dir /s /b a*') do (echo %%a:文件完整信息echo %%~da:保留文件所在驱动器信息echo %%~pa:保留文件所在路径信息echo %%~na:保留文件名信息echo %%~xa:保留文件后缀信息echo %%~za:保留文件大小信息echo %%~ta:保留文件修改时间信息echo %%~dpa:保留文件所在驱动器和所在路径信息echo %%~nxa:保留文件名及后缀信息echo %%~pnxa:保留文件所在路径及文件名和后缀信息echo %%~dpna:保留文件驱动器、路径、文件名信息echo %%~dpnxa:保留文件驱动器、路径、文件名、后缀信息)
延迟
方法一 ping
需要网卡支持
大概是睡20秒 👈 -n 20 值发送20个数据包
ping -n 20 127.0.0.1>nul
方法二 timeout
@echo offrem 睡三秒timeout /T 3 /NOBREAKecho 起床
获取键盘输入值
set /p ServiceName=请输入服务名: echo %ServiceName%
@echo off
隐藏执行过程直接输出结果
windows服务
sc create 注册 [ start=auto 默认是demand(手动)]
sc create 服务名 binPath= 文件地址 start=auto
sc delete 删除
sc delete %ServiceName%
sc query 查询
sc query type = %ServiceName%
自动以管理员模式打开
@echo offsetlocal EnableDelayedExpansioncolor 3etitle cmd名字PUSHD %~DP0 & cd /d "%~dp0"%1 %2mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof:runas# 写自己的脚本#set /p ServiceName=请输入服务名:#sc delete %ServiceName%echo 执行完毕,任意键退出pause >nulexit
跳转行
goto 指定行名,便调整过去开始往下执行
goto row :row 一个🌰 :main echo “hi”
goto test echo”测试”
:test echo “你好”
根据端口查询PID
netstat -aon|findstr 后面添加端口号或者pid
@echo offset /p mpid=请输入要查找的端口:for /f "tokens=5" %%a in ('netstat /ano ^| findstr %mpid%') do echo %%a# ["tokens=5" %%a] = 提取第5个字段 赋予到变量a# 数据来源为 命令行输出的内容 即:netstat /ano ^| findstr %mpid%
根据PID终止进程
taskkill /F /pid PID
查询本机MAC
@echo off@echo off@for /f "tokens=2 delims=:" %%f in ('@ipconfig /all^|findstr "..-..-..-..-..-.."') do @(echo 本机MAC地址为:%%f&pause)# ["tokens=2" %%a] = 提取第2个字段 赋予到变量f# delims=: 表设已冒号分隔# 数据来源为 命令行输出的内容 即:getmac
for循环
FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令 🌰 👇
pause 暂停

搜索
指定待搜索的文件
echo offecho 正在搜索,请稍候...for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist %%a:\ (for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*test.bat" 2^>nul') do (if /i "%%~nxb" equ "test.bat" (echo 搜索结束,文件路径为:%%bfor %%a in (%%b) do (echo 保留文件名及后缀信息:%%~nxa)))))
获取命令行传递的参数
%0~%9
🧨注意: %0 取得是 bat文件名 ,%0 是从 > 开始算的 跟shell的那个一样
echo offecho first: %0set x=%1echo two: %x%echo three: %3
进入wsl系统的目录
\wsl$
跟Linux 中的 ls 相似的命令
echo 官方说明 https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/dirdir
查看当前路径
dir chdir
Bat中关闭快速编辑模式
@echo offreg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f
将字符串输出到Windows剪贴板
clip < 文件路径\文件
重命名
ren 旧文件|目录 新文件|目录

🧨注意: %0 取得是 bat文件名  ,%0 是从 > 开始算的 跟shell的那个一样
