cmd常用语法学习以及简单应用

概述

.bat(Batch)与.cmd文件基本等价,通过调用cmd.exe(命令解释器)来执行命令,是一种简化的脚本语言

将其放在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp即可实现开机自启,(一开机就把对方关机)

与其他编程语言不同的是.bat更加方便调用操作系统

bat语言请不要乱加空格和缩进

所有语法可以通过指令/?的形式直接在cmd中查看,如for/? 下面只是选取了常用的语法

语法

命令大小写不敏感

物质

变量全是字符串,通过set来声明和定义

可以通过/a进行数值运算,通过/p进行输入

通过%var%或!var!来进行访问,后者在延迟模式下访问,即在运行时变量需要改变

set

set查看所有环境变量

setx test "Hello World" 创建/修改环境变量

set | findstr "Path" 查看指定环境变量

set /a num=%var1%+%var2% 将字符串进行算数运算 a: algorithmn

set /p path=please enter the file path: 即时输入prompt赋值

貌似desktop添加到path会不会生效,如果自定义的程序就专门弄个文件夹吧

string

(替换)延迟,截取,查找

@echo off
rem 使用Unicode编码,中文显示
chcp 65001 
set str=Hello World

rem 替换文本  延迟变量
@echo off&setlocal enabledelayedexpansion
set str=!str:World=BAT!
echo !str!
endlocal

rem 截取 (截取位置,截取长度) -代表从最后开始
set str1=%str:~-5%
set str2=%str:~0,5%
echo %str1%
echo %str2%

rem 查找,支持正则表达式
findstr /c:"geek" result.txt || echo 查找失败
echo %str% | findstr /c:"Hello" && echo 查找成功 || echo 查找失败

for /f "tokens=2 delims==" %i in ('findstr "PACKAGE=" config.ini') do set PACKAGE=%i

pause

echo

@echo off 不显示命令行本身

echo hello world 打印字符串

运动

控制语句

if/? 学会查看语法

if

判断dos命令的返回值IF [NOT] ERRORLEVEL number command

ping www.baidu.com -n 1 -w 10
IF ERRORLEVEL 0 (@echo baidu is available) 
ELSE (@echo baidu is unavailable)

判断逻辑关系 IF [NOT] string1==string2 command

set a=0
IF NOT  %a% ==0 (@echo success)
if      %a% ==0  (@echo fail)
if 1 NEQ 2 echo unequal
rem < : LSS || <= : LEQ || > : GTR || >= : GEQ || == : EQU || != : NEQ
for

数字遍历

FOR /L %variable IN (start,step,end) DO command [command-parameters]

rem 输出当前目录每一个文件名
for %%i in (*.*) do echo "%%i"
rem 输出1~10,间隔2
FOR /L %%i in (1,2,10) DO (echo %%i)

字符遍历

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

FOR /F %%i in ("abcde") DO (echo %%i )
pause

options

eol=c           - 指一个行注释字符的结尾(就一个)
skip=n          - 指在文件开始时忽略的行数。如表头
delims=xxx      - 指分隔符集。这个替换了空格和制表符的
默认分隔符集。
tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
的 for 本身。

将host中的ip地址以.分隔的第四段打印出来,这个挺常用的

for /F "delims=. tokens=4" %%i in (hosts.txt) DO (echo %%i )   //文件 
for /f "delims=" %%a in ('adb shell dumpsys window w ^| findstr mCurrent') do set activity=%%a  //命令的输出
for /f "delims=}" %%a in ("mCurrentFocus=Window{5d7f9b3 u0 com.supercell.clashofclans/com.supercell.titan.GameApp} ") do set activity=%%a //直接字符串

goto
:label
goto label 
延时
rem 暂停1s,利用选择来实现;
rem /t 1 等待1s; /d y默认选择yes; >nul不显示结果
choice /t 1 /d y >nul

重定向

>> > <输入,输出

echo hello>con 输出到控制台(默认)

>nul 不显示命令执行结果

echo 127.0.0.1 example.com>> %windir%\system32\drivers\etc\hosts 添加到文件末尾

组合

& 表示将多条命令连接在一起,前一条命令的状态不影响后一条命令的执行。

| 表示将多条命令连接在一起,并将前一条命令的输出作为后一条命令的输入。

&& 表示前一条命令成功时,才执行后一条命令。

|| 表示前一条命令失败时,才执行后一条命令。

其他

cls 清屏 pause暂停 ren 重命名 tree 指定目录的树状结构

type 显示文件内容

copy c:test.txt d:test.bak

title newtitle 设置cmd窗口的标题

del

系统

文件夹

dir 显示文件夹内容

cd切换目录 change dir

md创建目录 make

rd删除目录 remove

start 启动程序(放在user/username/目录下可直接快捷启动

隐藏cmd窗口

利用vbs实现

set ws=WScript.CreateObject("WScript.Shell")
ws.Run "d:\yourscript.bat",0

可以转化成bat,将下面加入代码开头

这里为脚本的第一个参数(%1)设置标签h防止脚本重复运行

@echo off 可以实现同样的效果,就是要闪一下
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin

windows小技巧

文件已被程序使用

ctrl+shift+esc打开任务管理器

打开性能->资源监视器->cpu页->搜索相关的句柄

image.png

使用

图片批量重命名

@echo off
setlocal enabledelayedexpansion

:loop
set /p path=please enter the path:
if not exist %path% (
  echo Error: The folder does not exist.
  goto loop
)

cd %path%
set i=0
for %%a in (*) do (
    set /a i+=1
    set num=0000!i!
    set num=!num:~-4!
    ren "%%a" "!num!.jpg"
)
echo done
pause
endlocal

扫盘

dir D:\*.exe /s>>.\result.txt

修改host文件

@echo off
net session >nul 2>&1 || echo please enter with administer
echo 127.0.0.1 www.bilibili.com >> %windir%\system32\drivers\etc\hosts
pause

循环等待输入

:input_loop
echo Input a value:
set /p input=
if "%input%" == "exit" goto exit_loop
echo You entered: %input%
goto input_loop

:exit_loop
echo Exiting loop.

修改环境变量

@echo off

REM Check if the script is run as administrator
net session >nul 2>&1
if %errorlevel% == 0 (
    echo Running as administrator
    goto choose
) else (
    echo This script requires administrator privileges. Exiting...
    goto exit
)

:choose
echo Please choose the mode:
echo 1. Add
echo 2. Remove
set /p choose=Enter your choice (1 or 2): 

if %choose% == 1 (
    set /p exePath="Enter the path to the exe file: "
    setx PATH "%PATH%;%exePath%"
) else if %choose% == 2 (
    set /p dirPath="Enter the path to the directory to be removed (enclosed in quotes if the path contains spaces): "
    set PATH=%PATH:%dirPath%=%
    setx PATH "%PATH%"
) else (
    echo Please enter a valid choice.
    goto choose
)

:exit
pause

恢复win10右键菜单

执行后需要重新启动才能生效

#修改为win10
reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
#还原为win11
reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f

关闭自动更新

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d "1" /f

关闭WD开机自启

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Windows Defender" /d "C:\Program Files\Windows Defender\MSASCui.exe" /f

关闭安装前提示

win+r control打开控制面板

用户账户->更改用户账户控制设置

将通知频率设为从不通知

windows修复系统

DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值