Fork me on GitHub

批处理中的变量和参数(一)

-------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编辑  收藏  举报

导航