最全面的window dos/bat 常用命令
创始人
2024-04-07 18:24:43

window dos/bat 常用命令

    • 系统默认的系统变量
    • 逻辑判断分支语句
      • 猜数字小游戏
    • 循环控制语句
    • 字符串截取、查找、替换
    • 网络相关
    • 文件相关
    • 随机数
      • cmd命令的随机数取值范围
      • 生成0-100以内的随机数
      • 生成n-m之内的随机数
    • 等待n秒执行
    • 其它

系统默认的系统变量

变量名说明
allUsersProfile返回所有用户配置文件位置的本地变量
appData返回应用程序在默认情况下存储数据的位置的本地变量。
cd返回当前目录字符串的本地变量
cmdCmdLine返回用于启动当前Cmd.exe程序的确切命令行的本地变量
cmdExtversion返回当前命令处理器扩展的版本号的系统变量
computerName返回计算机名称的系统变量
ComSpec将精确路径返回给命令外壳可执行文件的系统变量
date返回当前日期的系统变量。该变量与date/t命令使用相同的格式。
Cmd.exe程序生成此变量。有关详细DATE信息,请参阅 Date 命令
errorLevel返回最近使用命令的错误代码的系统变量。非零值通常表示错误。
homeDrive返回用户主目录的本地工作站驱动器号的系统变量。此变量是基于在组中为“本地用户”和“组”指定的主目录值设置的
homePath返回用户主目录的完整路径的系统变量。此变量是基于在组中为“本地用户”和“组”指定的主目录值设置的。
homeShare返回用户共享主目录的网络路径的系统变量。此变量是基于在组中为“本地用户”和“组”指定的主目录值
logOnServer本地变量,返回验证当前登录会话的域控制器的名称
number_of_processors指定计算机上安装的处理器数目的系统变量
os返回操作系统名称的系统变量,Windows XP Professional将操作系统显示为Microsoft Windows NT
path指定可执行文件的搜索路径的系统j环境变量
pathExt系统变量,返回操作系统将其视为可执行文件的文件扩展名的列表。
processor_architecture返回处理器芯片结构的系统变量。值:x86、IA64。
processor_identfier返回处理器描述的系统变量。
processor_level返回计算机处理器型号的系统变量。
processor_revision返回处理器修订号的系统变量。
prompt返回当前解释程序的命令提示设置的本地变量。由cmd.exe生成。
random返回0到32767之间的随机十进制数的系统变量,由cmd.exe 程序生成。
systemdrive返回包含 Windows根目录(例如,系统根目录)的驱动器的系统变量。
systemroot返回Windows根目录位置的系统变量。
temp 或 tmp系统和用户变量,返回当前登录的用户可以使用的应用
程序的默认临时目录。某些应用程序需要使用TEMP,
而其他应用程序需要使用TIP。
time返回当前时间的系统变量。该变量与time/t命令使
用相同的格式,并由cmd.exe生成。有关详细信息,请参阅Time 命令。
userdomain返回包含用户帐户的域的名称的本地变量。
username返回当前登录用户名的本地变量。
userprofile返回当前用户配置文件位置的本地变量。
windir返回操作系统目录位置的系统变量。
字体目录%WINDIR%\Fonts
帮助目录%WINDIR%\help
输入法目录%WINDIR%\ime
桌面/音乐/搜藏夹%USERPROFILE%\桌面
%USERPROFILE%\音乐
%USERPROFILE%\搜藏夹 等
右键菜单“发送到“%USERPROFILE%\SendTo
rem 文件后缀都为.bat
rem 关闭逐行输出
@echo off
rem 输出变量用%变量名%,变量名【若没有特殊说明】不区分大小写
rem 使用时间系统变量
echo "当前时间是:%date% %time%"
rem 使当前目录系统变量,特殊的扩展变量,输出时需要使用""
echo "脚本所在的目录 %~dp0"
rem %cd%表示的是运行该脚本所在的文件目录
rem 一般情况是脚本所在的目录,但是如果是第三方软件运行的,
rem 会显示第三方软件所在的文件夹,所以建议使用%~dp0来显示当前目录
echo "当前目录是 %cd%"
rem 其它的类似,这里就不再写了
rem 暂停不关闭窗口
pause

逻辑判断分支语句

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename commandNOT               不等于可以使用not,不存在也使用notERRORLEVEL number 每一条指令运行后都会产生一个错误等级值,写入系统变量ERRORLEVEL 中,0为错误,其它为正确如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。string1==string2  如果指定的文字字符串匹配,指定条件为 true。EXIST filename    如果指定的文件名存在,指定条件为 true。command           如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,该命令将在 ELSE 关键字之后执行该命令。ELSE 子句必须出现在同一行上的 IF 之后。例如:IF EXIST filename. (del filename.) ELSE (echo filename. missing.)由于 del 命令需要用新的一行终止,因此以下子句不会有效:IF EXIST filename. del filename. ELSE echo filename. missing由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
不会有效:IF EXIST filename. del filename.ELSE echo filename. missing如果都放在同一行上,以下子句有效:IF EXIST filename. (del filename.) ELSE echo filename. missing如果命令扩展被启用,IF 会如下改变:IF [/I] string1 compare-op string2 commandIF cmdExtversion number commandIF defined variable command其中, compare-op 可以是:**EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于**而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。
/I 开关可以用于 IF 的 string1==string2 的形式上。这些
比较都是通用的;原因是,如果 string1 和 string2 都是
由数字组成的,字符串会被转换成数字,进行数字比较。CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
是在跟与命令扩展有关联的内部版本号比较。第一个版本
是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。
命令扩展被停用时,CMDEXTVERSION 条件不是真的。如果已定义环境变量,DEFINED 条件的作用跟 EXIST 的一样,
除了它取得一个环境变量,返回的结果是 true。如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%
会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,你会得到
其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:goto answer%ERRORLEVEL%:answer0echo Program had return code 0:answer1echo Program had return code 1你也可以使用以上的数字比较:**IF %ERRORLEVEL% LEQ 1 goto okay**如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始
命令行;否则,你会得到其数值。如果没有名为 CMDEXTVERSION 的环境变量,
%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的
字串符表达式;否则,你会得到其数值。

猜数字小游戏

rem & 表示多条命令放在同一行执行
@echo off & title 猜数字小游戏 
rem 开启扩展命令,用于计算、扩展变量之类的
setlocal enabledelayedexpansion
rem %random% 命令行默认系统变量,表示生成随机数
REM 产生[min,max]之间的随机数,公式:随机数%(max-min+1)+min
rem 命令行中的取模用两个百分号%%表示
set /a r=%random%%%100+1 
rem  格式 :变量【可以任意取名】,类似于定义方法
rem goto 表示回到锚点,可以理解为重新进入方法
:input
rem 声明变量
set ent=
rem /p 获取从键盘输入的值,赋值给变量ent【enter】
set /p "ent=请小姐姐输入(1~100之间的数):"
rem 打印输入的值
echo "%ent%" 
rem 做边界值判断
rem 如果输入的值小于0,重新进入方法
if %ent% leq 0 (goto :input)
rem 如果输入的值大于100,重新进入方法
if %ent% gtr 100 (goto :input)
rem 偷瞄一下生成的随机数
rem echo "随机数:!r!"
rem 输入值=随机数
if %ent% equ !r! (echo "真棒!大聪明,猜中了!奖励小红花一朵,游戏结束")
rem 输入值<随机数
if %ent% lss !r! (echo "小猪猪,猜错了!【小了】重新猜" & goto :input)
rem 输入值>随机数
if %ent% gtr !r! (echo "小猪猪,猜错了!【大了】重新猜" & goto :input)
pause

循环控制语句

@echo off
rem rem 表示注释
echo "**************for 后面没有参数,只能搜索指定目录下的文件【不包含子目录】,指定多个目录用空格分开**********************"
for %%i in (D:\dir1\*.txt D:\dir1\dir2\*.txt) do echo %%i
echo "=======in (*)只有文件名,文件不包含路径,默认在当前目录下查找,*通配符表示一个或多个========="
for  %%i in (*) do echo %%i
echo "=======in (*.txt *.bat)只有文件名,文件不包含路径,多种文件格式用空格分开========="
for  %%i in (*.txt *.bat) do echo %%iecho "**************for 后面有参数**********************"
REM for 有/F参数 但是【没有指定】usebackq 选项的写法:注意in后面不同形式符号的不同
REM FOR /F "其它options..." %variable IN (file-set) DO command [command-parameters]
REM FOR /F "其它options..." %variable IN ("strng") DO command [command-parameters]
REM FOR /F "其它options..." %variable IN ('command') DO command [command-parameters]REM for 有/F参数并且指定了 usebackq 选项的写法:注意in后面不同形式符号的不同,加入usebackq的目的是防止目录或文件名称有空格
REM FOR /F "usebackq 空格后写其它options..." %variable IN ("file-set") DO command [command-parameters]
REM FOR /F "usebackq 空格后写其它options..." %variable IN ('string') DO command [command-parameters]
REM FOR /F "usebackq 空格后写其它options..." %variable IN (`command`) DO command [command-parameters]REM in中可以使用命令行得到结果作为后续处理对象,但需要用反引号括起来`` 同时使用"usebackq"
REM 结果中的文件包含路径,【如果想要去掉路径】 将【%%i】改成【%%~ni】扩展
for /f "usebackq" %%i in (`dir /a-d /s /b *.txt`) do echo %%i
echo "=======555555========="
for /f "usebackq" %%i in (`dir /s /b`) do echo %%i
echo "--------------------"
for /f "usebackq" %%i in ("1.txt") do echo %%i
echo "**********以下直接用不用改,使用=分割,**************************"
FOR /f "usebackq tokens=1* delims==" %%i IN (`set`) DO @echo [%%i=%%j]echo "*****************【写法一】:在命令行模式中使用到盘符需要用英文双引号括起来"D:\dir" 使用/a-d /s /b来搜索子目录*******************"
for /f "usebackq" %%i in (`dir "D:\dir1\*.txt" /a-d /s /b`) do echo %%irem 递归搜索指定目录下的指定类型的文件
echo "*************递归搜索指定目录下的指定类型的文件【包括子目录】,等同于【写法一】 ***********************"
for /r D:\dir1 %%i in (*.txt) do echo %%iecho.
echo "格式:FOR /D %variable IN (set) DO command [command-parameters]"
echo "这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。(特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录。)"
echo "==============显示c盘根目录下的所有目录 和d盘指定目录========================"
for /d %%i in (c:\* d:\dir1\*) do echo %%i 
echo "==============显示指定目录下名称只有1-4个字母的目录========================"
for /d %%i in (d:\dir1\????) do echo %%i echo.echo "格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]"
echo "该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step"
rem 输出1 2 3 4 5
echo "==============输出1 2 3 4 5========================"  
for /L %%i in (1,1,5) do echo %%i 
rem 输出1,3,5,7,9
echo "==============输出1,3,5,7,9========================"
for /L %%i in (1,2,10) do echo %%i 
rem 输出100,80,60,40,20
echo "==============输出100,80,60,40,20========================"
for /L %%i in (100,-20,1) do echo %%i 
rem 打开5个CMD窗口,慎用,我先注释掉
rem for /L %%i in (1,1,5) do start cmd 
rem 建立从1~5共5个文件夹
echo "==============建立从1~5共5个文件夹========================"
for /L %%i in (1,1,5) do md %%i 
rem  等待2秒
timeout /t 2
rem 删除从1~5共5个文件夹
echo "=============删除从1~5共5个文件夹========================="
for /L %%i in (1,1,5) do rd /q %%i rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
echo. & pause

字符串截取、查找、替换

@echo off
rem rem 表示注释
rem 字符串替换,格式【%变量名:oldStr=newStr%】
set aa=伟大的中国!我为你自豪!
rem 【方法一:直接用echo输出】
echo 替换前:%aa%
echo 替换后:%aa:中国=中华人民共和国%
rem 【方法二:用变量接收】
set "aa=%aa:中国=中华人民共和国%"
echo aa = %aa%REM  字符串截取 格式【%变量名:~x,y% 】(x是下标,从0开始,y是截取个数)
rem 截取日期的前两个字符
echo %date:~0,2%rem 字符串查找
rem |表示管道符,find或findstr表示查找字符串,
rem 管道符的作用是:将前一个命令的结果作为参数传递个下一条命令
echo "本机内网ip是"  
ipconfig | find "192.168"
echo "本机外网ip是" 
curl cip.cc | find "IP"
rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
echo. & pause

网络相关

@echo off
rem rem 表示注释
rem 查看本机内网ip 
ipconfig
rem 查看本机外网ip 
curl cip.ccrem 查看网络状态 
netstat -aon
rem 查找指定端口号 netstat -aon|findstr "端口号" 【第一步,会查到pid】
rem taskkill /pid xxx -f  【根据第一步得到的pid,结束进程】
rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
echo. & pause

文件相关

@echo off
rem rem 表示注释
echo "=======当前文件路径是=========%cd%"rem 列出文件层级目录及其文件,以图形显示目录结构
tree -frem 列出目录,显示目录中的文件和子目录列表
dir 
rem 列出当前目录及其子目录的所有文件
rem /a-d 表示排除目录,/s 搜索子目录下的文件 /b 显示全路径
dir /a-d /s /b
rem 列出当前目录及其子目录的特定文件
dir /a-d /s /b *.txt *.mp4
rem 搜索指定目录下的指定文件【这里搜索d盘】
dir d:\ /a-d /s /b *.txt *.mp4rem 创建目录、文件 md/mkdir 
rem 创建目录,不存在会创建
mkdir .\a\b\c\d 
rem 创建文件,默认在当前文件夹下
echo haha > hello.txt
**rem 这种形式 ,如果有目录不存在,会报错**
rem echo haha > .\a\b\hello.txtrem 显示当前目录名或改变【change】当前目录 cd/chdir
rem 直接键入cd 显示当前目录
cd 
rem cd 目录路径【不能改变驱动盘符】
rem 在c盘目录下,键入 cd d:\a 会没反应
**rem cd /d 目录路径【可以改变驱动盘符】**
cd /d d:\arem 删除目录、文件 del、rd/rmdir
rem /s 用于删除目录树 ,/q 安静模式,带 /S 删除目录树时不要求确认
rem rd /s /q 目录路径
rem del 删除一个或多个文件,/s 用于删除目录树 ,/q 安静模式,带 /S 删除目录树时不要求确认
rem del /s /q 目录路径rem 移动目录、文件 move
rem 移动文件并重命名文件和目录,不能垮盘符移动,否则会出现拒绝访问
rem .\表示当前目录,..\表示上一级目录,移动当前目录下的目录到当前目录的dir2目录中
move .\a dir2
rem 如果目的地是文件名,则重命名
move 6_2.txt 66.txt
rem 如果目的地是文件夹,则移动
move 6_2.txt .\a
rem 复制目录、文件 copy  将一份或多份文件复制到另一个位置【不会复制目录】
rem 将当前目录下的a文件夹中的文件,复制到上一级目录中
copy .\a ..\**rem 复制大量文件 xcopy 复制文件和目录树**
rem /s 复制目录和子目录,不包括空目录。
rem /j 复制时不使用缓冲的 I/O。推荐复制大文件时使用
xcopy 开始位置 目的位置 /s /jrem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
echo. & pause

随机数

cmd命令的随机数取值范围

%RANDOM% 系统变量只能返回 0 到 32767 之间的任意十进制数字。2的15次方等于32768,上面的0~32767实际就是15位二进制数的范围。
因此,利用cmd命令,生成的最大随机数就是32767,最小随机数就是-32767。
但我们一般不会在学习阶段去测试生成负的随机数,因为学会如何生成正随机数了,负随机数在正随机数的基础上加一个负号就能解决啦。

生成0-100以内的随机数

那么,如何获取100以内的随机数呢?
很简单,将%RANDOM%按100进行求余运算即可,见例子。
例:生成5个100以内的随机数
批处理中求模得用两个%%符号。 
@echo offrem 开启扩展命令,用于计算、扩展变量之类的setlocal enabledelayedexpansionfor /L %%i in (1 1 5) do (rem /a 表示开启计算模式set /a randomNum=!random!%%100rem !变量名!表示是引用的计算变量,应该能用%变量名%代替echo 随机数:!randomNum!)pause

生成n-m之内的随机数

求余数运算set /a randomNum=!random!%%100中的100可以是1~32768之间的任意整数。
总结:利用系统变量%random%,求余数运算%%,字符串处理等,可以实现很多随机处理。
通过上面的学习,我们知道,%random%可以产生0到32767之间的随机数,但是,如何才能得到一定范围内的随机数呢? 
我们可以使用通用的算法公式如下: 
通用的公式%random% %% (max-min+1)+min来产生[min,max]区间里的随机数,
注:批处理中求模得用两个%%符号。 
比如,我们想获得4到12之间的随机数,就可以这样来使用,代码如下:
REM 产生10个[4,12]间的随机数 
rem 若!变量名!没有效果,用%变量名%代替
@echo off 
REM 启用延迟环境变量扩展,使得变量%可以用!替代,如%random%与!random!效果一致
setlocal enabledelayedexpansion 
REM 设置随机数的最小和最大值以及求模用的变量 
set min=4 
set max=12 
set /a mod=!max!-!min!+1for /l %%i in (1,1,10) do ( 
REM 产生[min,max]之间的随机数 
set /a r=!random! %% !mod!+!min! 
echo. 
echo 随机数%%i:!r!
)
pause

等待n秒执行

@echo off
rem rem 表示注释
rem 20秒后自动关闭
timeout /t 20 
rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
echo. & pause

其它

@echo off
rem rem 表示注释
echo "改变字体颜色"
color 0a
rem 查看指令帮助格式 【help 指令】,或者 【指令 /?】 如:
for /?
dir /?
rem 查看所有指令
help
rem 将指令结果写入文件【覆盖】使用 >,forHelp.txt不存在会自动创建
for /? > forHelp.txt
echo "我是小孩也是王" > hello.ext
rem 将指令结果写入文件【追加】使用 >>,forHelp.txt不存在会自动创建
rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
echo. & pause
rem 去掉按任意键继续的提示使用 > nul
rem echo. & pause > nul

相关内容

热门资讯

春晚后,机器人卖爆了   2月16日晚,2026年春节联欢晚会正式开幕,一系列精彩的机器人表演不仅吸引了广大观众的关注,同...
俄美乌第三轮会谈今天举行 今天(2月17日),俄美乌三方第三轮会谈将在瑞士日内瓦举行。按照瑞士方面的通报,本次会谈闭门举行,媒...
巩固军地军民团结 谱写双拥共建... 转自:新甘肃巩固军地军民团结 谱写双拥共建新篇胡昌升走访慰问驻甘部队新甘肃客户端兰州2月14日讯(新...
省领导赴全省各地开展春节前走访... 转自:每日甘肃网-甘肃日报省领导赴全省各地开展春节前走访慰问活动 每日甘肃网讯(新甘肃·甘肃日报记者...
宜宾亮相央视春晚 看工行如何金... 中央广播电视总台2026年春节联欢晚会正在火热直播,刚刚惊艳亮相的宜宾分会场以璀璨灯光,厚重的历史文...