批处理中的变量和参数(一)
-------siwuxie095
批处理中的变量分为两类:系统变量 和 自定义变量
一、系统变量
系统变量的值由系统将其根据事先定义的条件自动赋值,即
这些变量系统已经给它们定义了值,不需要给它赋值,只需
要调用即可。如下:
%ALLUSERSPROFILE% | 本地 | 返回 "所有用户" 配置文件的位置 |
%APPDATA% | 本地 | 返回默认情况下应用程序存储数据的位置 |
%CD% | 本地 | 返回当前目录字符串。也就是获得当前路径,并将其转换为字符串 |
%CMDCMDLINE% | 本地 | 返回用来启动当前的 Cmd.exe 的准确命令行 |
%CMDEXTVERSION% | 系统 | 返回当前的 "命令处理程序扩展" 的版本号 |
%COMPUTERNAME% | 系统 | 返回计算机名称 |
%COMSPEC% | 系统 | 返回命令行解释器可执行程序的准确路径。也就是返回 cmd.exe 的路径,一般在 C:\WINDOWS\system32\cmd.exe |
%DATE% | 系统 | 返回当前日期字符串。和使用 date/t 效果一样 |
%ERRORLEVEL% | 系统 | 返回上一条命令的错误代码。通常用 0 表示正确,非0 表示错误 |
%HOMEDRIVE% | 系统 | 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在 "本地用户和组" 中指定的 |
%HOMEPATH% | 系统 | 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在 "本地用户和组" 中指定的 |
%HOMESHARE% | 系统 | 返回用户的共享目录的网络路径。基于主目录值而设置。用户主目录是在 "本地用户和组" 中指定的 |
%LOGONSERVER% | 本地 | 返回验证当前登录会话的域控制器的名称 |
%NUMBER_OF_PROCESSORS% | 系统 | 指定安装在计算机上的处理器数目(所有 CPU 的总核心数) |
%OS% | 系统 | 返回操作系统名称 |
%PATH% | 系统 | 指定可执行文件的搜索路径。也就是在这些目录下的可执行文件 (不仅仅是.exe,可以用 echo %PATHEXT% 查看哪些属于可执行文件。)可以直接在开始-->运行里直接执行,当然也可以在命令提示符、批处理中直接执行。例如记事本文件位于 C:\WINDOWS\NOTEPAD.EXE ,那么我们点击 "开始-->运行,输入 NOTEPAD " 就可以打开记事本了。或者我们打开 CMD 窗口 ,直接输入 NOTEPAD 也可以打开记事本 |
%PATHEXT% | 系统 | 返回操作系统认为可执行的文件扩展名的列表 |
%PROCESSOR_ARCHITECTURE% | 系统 | 返回处理器的芯片体系结构。返回值为 x86 或 IA64 或 RISC。这些都是常见的架构 ,或者称作指令集。 Windows 操作系统都是基于 x86 架构开发的,国产CPU 不是采用 x86 指令集 ,所以无法运行 Windows |
%PROCESSOR_IDENTFIER% | 系统 | 返回处理器说明 |
%PROCESSOR_LEVEL% | 系统 | 返回计算机上安装的处理器型号 |
%PROCESSOR_REVISION% |
| 返回处理器版本号 |
%PROMPT% | 本地 | 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成 |
%RANDOM% | 系统 | 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成 |
%SYSTEMDRIVE% | 系统 | 返回包含Windows server operation system根目录(即系统根目录)的驱动器 |
%SYSTEMROOT% | 系统 | 返回 Windows server operation system 根目录位置 |
%TEMP% 和 %TMP% | 系统 用户 | 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP |
%TIME% | 系统 | 返回当前时间字符串。使用与 time /t 命令相同的格式 |
%USERDOMAIN% | 本地 | 返回包含用户账户的域的名称 |
%USERNAME% | 本地 | 返回当前登录的用户的名称 |
%USERPROFILE% | 本地 | 返回当前用户的配置文件的位置 |
%WINDIR% | 系统 | 返回操作系统目录的位置 |
win10系统,登录用户:siwuxie095,testx.bat保存在桌面,测试如下:
1、%ALLUSERSPROFILE%
2、%APPDATA%
3、%CD%
4、%CMDCMDLINE%
5、%CMDEXTVERSION%
6、%COMPUTERNAME%
7、%COMSPEC%
8、%DATE%
9、%ERRORLEVEL%
10、%HOMEDRIVE%
11、%HOMEPATH%
12、%HOMESHARE%
13、%LOGONSERVER%
14、%NUMBER_OF_PROCESSORS%
15、%OS%
16、%PATH%
17、%PATHEXT%
18、%PROCESSOR_ARCHITECTURE%
19、%PROCESSOR_IDENTFIER%
20、%PROCESSOR_LEVEL%
21、%PROCESSOR_REVISION%
22、%PROMPT%
23、%RANDOM%
24、%SYSTEMDRIVE%
25、%SYSTEMROOT%
26、%TEMP%
27、%TMP%
28、%TIME%
29、%USERDOMAIN%
30、%USERNAME%
31、%USERPROFILE%
32、%WINDIR%
应用:
如:利用 %PROCESSOR_ARCHITECTURE% 判断当前计算机是几位的
@echo off if "%PROCESSOR_ARCHITECTURE:~0,3%" equ "x86" (echo 32位计算机) else echo 64 位计算机 pause>nul |
sublime中:
运行一览:
如:利用系统变量实现清理系统垃圾
@echo off title 清除 Windows 10 系统垃圾 del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %systemdrive%\*.log ::帮助的临时文件 del /f /s /q %systemdrive%\*.gid ::丢失簇的恢复文件 del /f /s /q %systemdrive%\*.chk ::旧备份文件 del /f /s /q %systemdrive%\*.old del /f /s /q %systemdrive%\recycled\*.* ::临时备份文件 del /f /s /q %windir%\*.bak ::删除上网预读信息 del /f /s /q %windir%\prefetch\*.* ::直接删除 C:\Windows\temp 文件夹 ,并新建 temp 文件夹。 rd /s /q %windir%\temp & md %windir%\temp ::删除用户名下的 cookies 文件夹内容。 del /f /q "%userprofile%\cookies\*.*" ::删除最近浏览文件的快捷方式 del /f /q "%userprofile%\recent\*.*" ::清除用户临时页面文件 del /f /s /q "%userprofile%\Local Settings\TemporaryInternetFiles\*.*" ::清除用户临时文件 del /f /s /q "%userprofile%\Local Settings\Temp\*.*" del /f /s /q "f:\Temporary Internet Files\*.*" del /f /s /q "%userprofile%\recent\*.*" ::删除 C 盘安装信息文件 del /f /s /q "C:\Program Files\Installshield InstallationInformation\*.*" ::删除升级补丁信息 del /f /s /q "C:\WINDOWS\SoftwareDistribution\Download\*.*" ::删除历史记录 rd /s /q "%userprofile%\Local Settings\History" dir %SystemRoot%\$*$ /ad/b >%SystemRoot%\vTmp.txt for /f %%a in (%SystemRoot%\vTmp.txt) do rd /s /q "%SystemRoot%\%%a" echo 清除系统垃圾完成 !& pause |
sublime中:
运行一览:
如:用%RANDOM% 获取随机数
注:%random% 可以随机获得 0 到 32767 之间的任意
一个十进制数字(32767 用二进制表示为 15 个 1)
@echo off echo %random% pause |
sublime中:
运行一览:
注意,下面的程序只能获得一个随机数
(即每次执行获得10个一样的随机数):
@echo off for /l %%i in (1,1,10) do echo %random% pause |
sublime中:
运行一览:
必须使用延迟变量:
@echo off setlocal enabledelayedexpansion for /l %%i in (1,1,10) do echo !random! pause |
sublime中:
运行一览:
产生指定区间 [min,max] 里的随机数,采用格式:
%random%%%(max-min+1)+min
如:产生 1 到 10 的随机数字
@echo off set /a num=%random%%%10+1 echo %num% pause |
sublime中:
运行一览:
如:在当前目录下的 test.txt 文本文件中随机读取一行数据
(test.txt 以某软件的使用说明作测试)
@echo off setlocal enabledelayedexpansion for /f "tokens=*" %%i in (test.txt) do (set /a h+=1 & set r!h!=%%i) set /a s=%random% %% h+1 echo !r%s%! pause |
或
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "TOKENS=*" %%i IN (TEST.TXT) DO (SET /A h+=1 & SET r!h!=%%i) SET /A s=%RANDOM% %% h+1 ECHO !r%s%! PAUSE |
sublime中:
或
运行一览:
随机取值程序:
@echo off mode con cols=84 lines=36 ::设置窗口大小 title 随机取值程序 ::设置窗口标题 color 9f ::设置窗口颜色 set num=0 ::取值次数计数器归零 :begin set k= echo. & echo. echo %k% 随机取值程序 echo. & echo. set /p a=%k%请输入目标数字: set /p min=%k%请输入取值范围最小值: set /p max=%k%请输入取值范围最大值: set /a count=max-min+1 ::计算取值范围大小 if %max% lss %min% ( echo. echo %k%取值范围最大值小于最小值,输入错误,请重新输入。 pause > nul cls goto begin ) echo. echo %k%您输入的数字是 %a% echo %k%取值范围是 [ %min% , %max% ] if %a% lss %min% goto tuichu if %a% gtr %max% goto tuichu ::如果目标数字在取值范围之外,返回并重新输入 echo. & echo. echo %k%按任意键开始随机取值 echo. pause > nul echo ---------------------------------------------------------------------------------- :xun set /a b=%RANDOM%%%(max-min+1)+min ::在取值范围内随机取值 set /a panduan=%num%%%10 if %panduan% == 0 echo. ::每输出 10 个数字,就回车换行 set /a num+=1 ::计数器加 1 set c= %b% set /p=%c:~-7% <nul if %b% == %a% ( echo. & echo. & echo. echo ---------------------------------------------------------------------------------- echo %k%本次从 [%min% , %max%] 共%count%个数字中随机取值%num%次,出现了目标数字%a% echo. & echo. echo 按任意键退出 pause > nul exit ) else (goto xun) :tuichu echo.& echo. echo %k%目标数字在取值范围之外,无法取值,请重新输入 pause > nul cls goto begin |
sublime中:
运行一览:
【made by siwuxie095】
posted on 2017-01-26 02:05 siwuxie095 阅读(25447) 评论(0) 编辑 收藏 举报