utf-8乱码问题

在bat中加入 CHCP 65001
e.g utf-8编辑模式下

  1. CHCP 65001
  2. @echo off
  3. @echo 根据端口关闭进程

image.png

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:\=\%

文件相关参考

  1. @echo off
  2. for /f %%a in ('dir /s /b a*') do (
  3. echo %%a:文件完整信息
  4. echo %%~da:保留文件所在驱动器信息
  5. echo %%~pa:保留文件所在路径信息
  6. echo %%~na:保留文件名信息
  7. echo %%~xa:保留文件后缀信息
  8. echo %%~za:保留文件大小信息
  9. echo %%~ta:保留文件修改时间信息
  10. echo %%~dpa:保留文件所在驱动器和所在路径信息
  11. echo %%~nxa:保留文件名及后缀信息
  12. echo %%~pnxa:保留文件所在路径及文件名和后缀信息
  13. echo %%~dpna:保留文件驱动器、路径、文件名信息
  14. echo %%~dpnxa:保留文件驱动器、路径、文件名、后缀信息
  15. )

延迟

方法一 ping

需要网卡支持

大概是睡20秒 👈 -n 20 值发送20个数据包

ping -n 20 127.0.0.1>nul

方法二 timeout

  1. @echo off
  2. rem 睡三秒
  3. timeout /T 3 /NOBREAK
  4. 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%

自动以管理员模式打开

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. color 3e
  4. title cmd名字
  5. PUSHD %~DP0 & cd /d "%~dp0"
  6. %1 %2
  7. mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
  8. :runas
  9. # 写自己的脚本
  10. #set /p ServiceName=请输入服务名:
  11. #sc delete %ServiceName%
  12. echo 执行完毕,任意键退出
  13. pause >nul
  14. exit

跳转行

goto 指定行名,便调整过去开始往下执行

goto row :row 一个🌰 :main echo “hi”

goto test echo”测试”

:test echo “你好”

根据端口查询PID

netstat -aon|findstr 后面添加端口号或者pid

  1. @echo off
  2. set /p mpid=请输入要查找的端口:
  3. for /f "tokens=5" %%a in ('netstat /ano ^| findstr %mpid%') do echo %%a
  4. # ["tokens=5" %%a] = 提取第5个字段 赋予到变量a
  5. # 数据来源为 命令行输出的内容 即:netstat /ano ^| findstr %mpid%

根据PID终止进程

taskkill /F /pid PID

查询本机MAC

  1. @echo off
  2. @echo off
  3. @for /f "tokens=2 delims=:" %%f in ('@ipconfig /all^|findstr "..-..-..-..-..-.."') do @(echo 本机MAC地址为:%%f&pause)
  4. # ["tokens=2" %%a] = 提取第2个字段 赋予到变量f
  5. # delims=: 表设已冒号分隔
  6. # 数据来源为 命令行输出的内容 即:getmac

for循环

FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令 🌰 👇

pause 暂停

image.png

搜索

指定待搜索的文件 image.png

  1. echo off
  2. echo 正在搜索,请稍候...
  3. 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 (
  4. if exist %%a:\ (
  5. for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*test.bat" 2^>nul') do (
  6. if /i "%%~nxb" equ "test.bat" (
  7. echo 搜索结束,文件路径为:%%b
  8. for %%a in (%%b) do (
  9. echo 保留文件名及后缀信息:%%~nxa
  10. )
  11. )
  12. )
  13. )
  14. )

获取命令行传递的参数

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

  1. echo off
  2. echo first: %0
  3. set x=%1
  4. echo two: %x%
  5. echo three: %3

进入wsl系统的目录

\wsl$ image.png

跟Linux 中的 ls 相似的命令

  1. echo 官方说明 https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/dir
  2. dir

查看当前路径

dir chdir

Bat中关闭快速编辑模式

  1. @echo off
  2. reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f

将字符串输出到Windows剪贴板

  1. clip < 文件路径\文

image.png

重命名

ren 旧文件|目录 新文件|目录