- 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 off
for /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 off
rem 睡三秒
timeout /T 3 /NOBREAK
echo 起床
获取键盘输入值
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 off
setlocal EnableDelayedExpansion
color 3e
title cmd名字
PUSHD %~DP0 & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas
# 写自己的脚本
#set /p ServiceName=请输入服务名:
#sc delete %ServiceName%
echo 执行完毕,任意键退出
pause >nul
exit
跳转行
goto 指定行名,便调整过去开始往下执行
goto row :row 一个🌰 :main echo “hi”
goto test echo”测试”
:test echo “你好”
根据端口查询PID
netstat -aon|findstr 后面添加端口号或者pid
@echo off
set /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 off
echo 正在搜索,请稍候...
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 搜索结束,文件路径为:%%b
for %%a in (%%b) do (
echo 保留文件名及后缀信息:%%~nxa
)
)
)
)
)
获取命令行传递的参数
%0~%9 🧨注意: %0 取得是 bat文件名 ,%0 是从 > 开始算的 跟shell的那个一样
echo off
echo first: %0
set x=%1
echo two: %x%
echo three: %3
进入wsl系统的目录
\wsl$
跟Linux 中的 ls 相似的命令
echo 官方说明 https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/dir
dir
查看当前路径
dir chdir
Bat中关闭快速编辑模式
@echo off
reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f
将字符串输出到Windows剪贴板
clip < 文件路径\文件
重命名
ren 旧文件|目录 新文件|目录