[计算器]
格式:set /a 表达式
示例:set /a 1+2*3
输出 7
!注意!
set不能用在复合语句里面比如if 1==1 set a=2或者for %%i in (a) do set a=2
预定义的变量
下面是些已经被底层定义好可以直接使用的变量:不会出现在 SET 显示的变量列表中
%CD%
- 扩展到当前目录字符串。
%DATE%
- 用跟 DATE 命令同样的格式扩展到当前日期。
%TIME%
- 用跟 TIME 命令同样的格式扩展到当前时间。
%RANDOM%
- 扩展到 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL%
- 扩展到当前 ERRORLEVEL 数值。
%CMDEXTVERSION%
- 扩展到当前命令处理器扩展名版本号。
%CMDCMDLINE%
- 扩展到调用命令处理器的原始命令行。
%0
bat的完整路径名如"C:\Windows\system32\xxx.bat"
%1
bat参数1依次类推%2参数2...
%path%
- 当前的环境变量。以分号隔开的路径列表,路径可包含空格,可以以'\'结尾, 可以以双引号包围之。
@ 与%i相关的变量(bat参数或者for循环的%i)
假设文件为C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%0
C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%~dp0
C:\Documents and Settings\jinsun\桌面\
%cd%
C:\Documents and Settings\jinsun\桌面
%~nx0
ParseSinglePkgs.bat
%~n0
ParseSinglePkgs
%~x0
.bat
获取批处理文件所在路径
在开发时,经常需要使用批处理运行一些程序,java程序 犹其是这样,往往需要运行时根路径。Hardcode一个路径总是令自己觉得不自在,例如一个java程序从一台机copy到另外一台机,盘符往往发生变化,先修改一下bat里的路径再运行显然很麻烦。
在批处理开头加入
cd /d %~dp0
一行代码就真真实实地做到“编写一次,到处运行”。%0是批处理文件本身的路径,%~dp进行扩展, d向前扩展到驱动器,p往后扩展到路径。例如,你的bat文件在e:/mybat/test.bat,则%0就是e:/mybat/test.bat, %~dp0是e:/mybat/。 /d选项支持CD到不同盘符。
另外,%i提取第i个命令选项,例如%1提取第1个option,i可以取值从1到9
%~0: 取文件名(名+扩展名)
%~f0:取全路径
%~d0:取驱动器名
%~p0:只取路径(不包驱动器)
%~n0:只取文件名
%~x0:只取文件扩展名
%~s0:取缩写全路径名
%~a0:取文件属性
%~t0:取文件创建时间
%~z0:取文件大小
以上选项可以组合起来使用。
获取命令行参数
%0,%1,%2,... %9,可以用来引用命令行参数,其中%0表示被执行的bat文件本身,%1~%9表示第1到第9个命令行参数。
如果参数个数超过10个,可以用shift命令左移,这个时候%1表示第二个参数,%9表示第10个参数,一次类推。
比如下面的程序段用来获取完整的命令行参数字符串。(完成此功能一个更好的办法是用%*)
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs
@ 与%VAR%相关的变量
%
VAR
:str1=str2%
会将VAR中的str1替换为str2(str2如果为空则可以达到删除的效果,str1前可以加*,变量%ABC:*B=%是C)
%VAR:~0,-2%
会提取VAR 变量的所有字符,除了最后两个
%
VAR
:~-2%
会提取VAR 变量的最后两个
系统变量:
他们的值由系统将其根据事先定义的条件自动赋值,我们只需要调用而已
%ALLUSERSPROFILE% (allusersprofile)本地 返回“所有用户”配置文件的位置。 C:Documents and SettingsAll Users
%APPDATA% (appdata)本地返回默认情况下应用程序存储数据的位置。 C:Documents and SettingsAdministratorApplication Data
%CD% (cd)本地返回当前目录字符串。 C:Documents and SettingsAdministrator桌面
%CMDCMDLINE% (cmdcmdline)本地返回用来启动当前的 Cmd.exe 的准确命令行。 cmd /c ""C:Documents and SettingsAdministrator桌面a.bat" "
%CMDEXTVERSION%(cmdextversion)系统返回当前的“命令处理程序扩展”的版本号。2
%COMPUTERNAME% (computername)系统返回计算机的名称。 xxxx
%COMSPEC% (comspec) 系统返回命令行解释器可执行程序的准确路径。 C:WINDOWSsystem32cmd.exe
%DATE% 系统返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL% (errorlevel) 系统返回上一条命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% (homedrive)系统返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 C:
%HOMEPATH% (homepath) 系统返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 Documents and SettingsAdministrator
%HOMESHARE% (homeshare) 系统返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSERVER% (logonserver) 本地返回验证当前登录会话的域控制器的名称 \ xxxx
%NUMBER_OF_PROCESSORS% (numeer_of_processors) 系统指定安装在计算机上的处理器的数目。
%OS% (os)系统返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
%PATH% (path)系统指定可执行文件的搜索路径。
%PATHEXT% (pathext)系统返回操作系统认为可执行的文件扩展名的列表。 .COM .EXE .BAT .CMD .VBS .VBE .JS .JSE .WSF .WSH
%PROCESSOR_ARCHITECTURE% (processor_architecture) 系统返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium x86
%PROCESSOR_IDENTFIER% (processor_identfier)系统返回处理器说明。
%PROCESSOR_LEVEL% (processor_level)系统返回计算机上安装的处理器的型号。 15
%PROCESSOR_REVISION% (processor_revision)系统返回处理器的版本号。 4f02
%PROMPT% (prompt)本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。$P$G
%RANDOM% (random)系统返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 30580
%SYSTEMDRIVE% (systemdrive)系统返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。 C:
%SYSTEMROOT% (systemroot)系统返回 Windows server operating system 根目录的位置。C:WINDOWS
%TEMP%(temp) C:DOCUME~1ADMINI~1LOCALS~1Temp和 %TMP% (tmp)C:DOCUME~1ADMINI~1LOCALS~1Temp系统和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% (userdomain)本地返回包含用户帐户的域的名称。 xxxx
%USERNAME% (username)本地返回当前登录的用户的名称。 Administrator
%USERPROFILE% (userprofile)本地返回当前用户的配置文件的位置。 C:Documents and SettingsAdministrator
%WINDIR%(windir) 系统 返回操作系统目录的位置。 C:WINDOWS
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo
命令
将显示当前回显设置。语法
echo [{on|off}] [message] Sample:echo off / echo hello world 在实际应用中我们会把这条
命令
和
重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些
命令
到特定格式的文件中.这将在以
后的例子中体现出来。
2.@
命令
表示不显示@后面的
命令
,在入侵过程中(例如
使用
批处理
来格式化敌人的硬盘)自然不能让对方看到你
使用
的
命令
啦。 Sample:@echo off @echo Now initializing the program,please wait a minite…
@format X: /q/u/auto
set
(format 这个
命令
是不可以
使用
/y这个参数的,可喜的是微软留了个auto
set
这个参数给我们,效果和/y是一样的。)
3.Goto
命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的
命令
。语法:goto label (label是参数,指
定所要转向的
批处理
程序中的行。) Sample: if {%1}=={} goto noparms if {%2}=={} goto noparms
(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。) @Rem check parameters
if null show usage :noparms echo Usage: monitor.
bat
ServerIP PortNumber goto end 标签的名字
可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto
命令
就是根据这
个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem
命令
注释
命令
,在C语言中相当与/*——–*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自
己日后修改。 Rem Message Sample:@Rem Here is the description.
5.Pause
命令
运行 Pause
命令
时,将显示下面的消息: Press any key to continue . . . Sample: @echo off
:begin copy a:*.* d:\back echo Please put a new disk into driver A pause goto begin 在这个
例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器
A 时,pause
命令
会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
6.Call
命令
从一个
批处理
程序调用另一个
批处理
程序,并且不终止父
批处理
程序。call
命令
接受用作调用目标的标
签。如果在脚本或
批处理
文件外
使用
Call,它将不会在
命令
行起作用。语法 call [[Drive:][Path]
FileName [
Bat
chParameters]] [:label [arguments]] 参数 [Drive:}[Path] FileName 指定要调用的批
处理程序的位置和名称。filename 参数必须具有 .
bat
或 .cmd 扩展名。
7.start
命令
调用外部程序,所有的DOS
命令
和
命令
行程序都可以由start
命令
来调用。入侵常用参数: MIN 开始时窗
口最小化 SEPARATE 在分开的空间内开始 16 位 Windows 程序 HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序 WAIT 启动应用程序并等候它结束 parameters 这些为
传送到
命令
/程序的参数执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命
令提示。如果在
命令
脚本内执行,该新行为则不会发生。
8.choice
命令
choice
使用
此
命令
可以让用户输入一个字符,从而运行不同的
命令
。
使用
时应该加/c:参数,c:后应写提
示可输入的字符,之间无空格。它的返回码为1234…… 如: choice /c:dme defrag,mem,end 将显示
defrag,mem,end[D,M,E]? Sample: Sample.
bat
的内容如下: @echo off choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码) if error
变量
的类型
批处理
中的
变量
基本上是万能的,可以储存各种各样的数据,不过用来计算时你会发现
变量
类型转为了int,数值的极端范围为[-2147483648,2147483647],如果不拿来计算的话,似乎数万位也是可以的
变量
的命名
批处理
的
变量
命名没有什么限制…不过建议命名还是遵守标准的命名方法,不然
@Echo Off
Set
IF=
Set
%IF% lF=Goto
IF %IF%==IF...
请看
set
var=我是值 ,这就是
BAT
直接在
批处理
中设置
变量
的方法!
set
是
命令
var是
变量
名 =号右边的"我是值"是
变量
的值
在
批处理
中我们要引用这个变就把var
变量
名用两个%(百分号)扩起来,如%var%
这种
SET
语法只能直接在
BAT
代码的酸前赋予
变量
的值,有时候我们需要提供一个交互界面,让
记得在初中的时候,电脑刚刚进入了我们的生活,有一天同学发过来一个 xxx.
bat
的文件,我双击打开之后,电脑就很快就关机了,当时的我还是一头雾水,后来知道这只是一个只需一行代码的
批处理
文件。
批处理
文件是一种简化的脚本,可以帮助我们运行一些特定的动作,将一些人工的工作自动化起来,在工作之后,
批处理
脚本又成了工作的好帮手,提升了工作效率,让工作变得舒服轻松,想必看到这篇文章的同学都不需要我过多的解...
在
bat
文件中声明
变量
的方式如下:
set
xxx_variant_name=yyyyyyyyyyyy
move D:\abc\efg\test.txt %xxx_variant_name%\test.txt
01.
set
那句是声明
变量
xxx_variant_name,并给该
变量
赋值yyyyyyyyyyyy
02.
使用
变量
时,需要在前后加上 %
举例...
@rem
set
x
BAT
_HOME1 C:\
bat
\
bat
1
@rem 通过 %Path% 引用其他环境
变量
set
x
BAT
_HOME1 %
BAT
_HOME%%\
bat
1
此
命令
只会将
变量
添加到用户环境
变量
中。
bat
bat
脚本设置永久环境
变量
作为程序员,是不是经常需要设置系统环境
变量
,比如安装 java后,安装Python后,或者安装免安装版程序。个人喜欢用绿色版,因为这样就不用安装。但也需要做些设置,下面就用
bat
脚本来设置环境
变量
。
首先,熟悉 一下
set
x
命令
,
命令
行
set
x /? 查询 选项
C:\Users\ycg>
set
x /?
Set
X 有三种
使用
方式:
语法 1:
SET
X [/S system [/U [domain\]user [/P [password]
环境:windows tomcat6
由于tomcat默认的shutdown.
bat
存在无法及时关闭进程的问题,进而可能导致tomcat同时存在两个进程在执行,导致schedule任务被重复执行。因此需要一种保证tomcat在同一时间点只能存在一个进程机制。
解决方案:
在tomcat启动时判断当前目录下tomcat.pid文件是否存在,如果存在则提示"tomcat is running",否则就在当前目录下创建tomcat.pid文件;
在tomcat停止时,为了保险起见可以通过taskkill
命令
强.
既然我们称之为
批处理
编程,那么
变量
是少不了的,在
批处理
中既可以自定义
变量
也可以
使用
系统
变量
,我们先来了解一下自定义
变量
。
(1)自定义
变量
请看如下
命令
:
@echo off
set
myname=okbase.net
set
myage=3
echo %myname% is about %myage% years old
pause
运行结果:
okbase.net is abou
在Windows操作系统下,可以
使用
PuTTY工具来链接ssh
命令
。PuTTY是一个自由及开放源代码的软件,可以提供Telnet和SSH等网络协议的连接。以下是一个链接ssh
命令
的示例
bat
脚本:
@echo off
set
/p user="Enter username: "
set
/p host="Enter hostname: "
set
/p password="Enter password: "
echo Connecting to %user%@%host%...
putty.exe -ssh %user%@%host% -pw %password%
在该脚本中,首先
使用
set
命令
获取用户输入的用户名、主机名和密码。然后
使用
putty.exe
命令
来链接ssh
命令
,并通过%user%、%host%和%password%
变量
传递对应的值。最后,
使用
echo
命令
输出连接信息。
请注意,在
使用
该脚本时,需要将PuTTY的可执行文件putty.exe所在的路径加入到环境
变量
中。