赞
踩
批处理脚本文件具有特殊的扩展名BAT或CMD,这种类型的文件通过称为**命令解释器(cmd.exe)**的系统文件提供的接口(shell)来识别和执行。
@echo off
@echo off
chcp 65001
Rem Remarks
程序执行时忽略Rem关键字之后的任何内容。
:: Remarks
DIR C:\ > lists.txt 2> &1
@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"
>
:删除原文件,重新写
>>
:追加文件,新行写入
rem Test.bat
@echo off
echo %1
echo %2
echo %3
运行方式
Test.bat 1 2 3
set /A variable-name=value
@echo off
set message=Hello World
echo %message%
rem 变量需要包含在%符号中显示
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
批处理中的@表示本身命令不回显,一般没必要加,只需要@echo off。
@set a=3
:: set a=3 这行命令不显示
SETLOCAL
命令,使变量局部在脚本的范围内。ENDLOCAL
,调用EXIT
,或者当执行到达脚本中的文件结尾(EOF)时都会返回。@echo off
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
@echo off
echo %JAVA_HOME%
set message=Hello World
SET a=
if [%a%]==[] echo "String A is empty"
要检查是否存在空字符串,需要在方括号中包含变量名,并将其与方括号中的值进行比较。
@echo off
SET a=Hello
SET b=World
SET /A d=50
SET c=%a% and %b% %d%
echo %c%
:: Hello and World 50
@echo off
set str=Hello World
call :strLen str strlen
echo String is %strlen% characters long
exit /b
:strLen
setlocal enabledelayedexpansion
:strLen_Loop
if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof
使用set变量设置为字符串的变量后,可以使用set变量的**/A开关转换为整数**。
@echo off
set var=13145
set /A var=%var% + 5
echo %var%
%variable:~num_chars_to_skip%
%variable:~num_chars_to_skip,num_chars_to_keep%
@echo off
set str=Helloworld
echo %str%
set str=%str:~0,5%
echo %str%
输出:
Helloworld
Hello
~0,5
用于指定需要显示的字符
@echo off
set x=1000
set y=1
set y=%y%
echo %x%
set y=%y:~-4%
echo %y%
输出
1000
1
使用~-4
选项来表示只想显示字符串y的最后4个字符。
@echo off
set str=Batch scripts is easy. It is really easy.
echo %str%
:: 删除is
set str=%str:is=%
echo %str%
:: Batch scripts easy. It really easy.
@echo off
set str=Batch scripts is easy. It is really easy
echo %str%
set str=%str:~1,-1%
echo %str%
:: atch scripts is easy. It is really eas
:=
@echo off
set str=This string has a lot of spaces
echo %str%
set str=%str:=%
echo %str%
:: Thisstringhasalotofspaces
@echo off
set str=This message needs changed.
echo %str%
set str=%str:needs=has%
echo %str%
:: This message has changed.
set a[0]=1
@echo off
set list=1 2 3 4
(for %%a in (%list%) do (
echo %%a
))
echo %a[0]%
Set a[3]=4
@echo off
setlocal enabledelayedexpansion
set topic[0]=comments
set topic[1]=variables
set topic[2]=Arrays
set topic[3]=Decision making
set topic[4]=Time and date
set topic[5]=Operators
for /l %%n in (0,1,5) do (
echo !topic[%%n]!
)
for循环移动范围的/L
参数用于迭代数组。
@echo off
set Arr[0]=1
set Arr[1]=2
set Arr[2]=3
set Arr[3]=4
set "x=0"
:SymLoop
if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set /a "x+=1"
GOTO :SymLoop
)
echo "The length of the array is" %x%
@echo off set len=3 set obj[0].Name=Joe set obj[0].ID=1 set obj[1].Name=Mark set obj[1].ID=2 set obj[2].Name=Mohan set obj[2].ID=3 set i=0 :loop if %i% equ %len% goto :eof set cur.Name= set cur.ID= for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( set cur.%%k=%%l ) echo Name=%cur.Name% echo Value=%cur.ID% set /a i=%i%+1 goto loop
if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value")
if defined
:变量是否存在if defined str1 echo "Variable str1 is defined"
if exists
:文件是否存在if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")
if errorlevel
:测试运行的最后一个命令的退出代码if errorlevel n somecommand
各种命令发出整数退出代码来表示命令的状态。 通常,如果命令成功完成,则命令通过传递0;如果命令失败,命令通过传递1。
FOR %variable IN (set) DO command [command-parameters]
eg:
// 将脚本所在目录下后缀为txt的文件复制到目录D:\1中
@echo off
for /r D:\2 %%a in (*.txt, *.DLL) do copy %%a D:\1
pause
%%a 为变量,/r 为递归方式,in 与 do 之间一定要有 ()。
搜索指定路径及其所有子目录中符合要求的文件(/r后如果没有指定目录,则使用当前目录)
@echo off
SET /A a=5
if %a%==5 goto :labela
if %a%==10 goto :labelb
:labela
echo "The value of a is 5"
exit /b 0
:labelb
echo "The value of a is 10"
运算符 | 备注 |
---|---|
EQU | 相等 |
NEQ | 不等 |
LSS | 左小于右 |
LEQ | 小于等于 |
GTR | 大于 |
GEQ | 大于等于 |
echo %DATE%
@echo off
echo/Today is: %year%-%month%-%day%
goto :EOF
setlocal ENABLEEXTENSIONS
set t=2&if "%date%z" LSS "A" set t=1
for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do (
for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF
echo %TIME%
:function_name
Do_something
EXIT /B 0
:Display
SET /A index=2
echo The value of index is %index%
EXIT /B 0
@echo off
Rem main
SETLOCAL
CALL :Display 5 , 10
EXIT /B %ERRORLEVEL%
Rem function
:Display
echo The value of parameter 1 is %~1
echo The value of parameter 2 is %~2
EXIT /B 0
EXIT / B%ERRORLEVEL%
语句,以便将主程序的代码与函数分开。~1
来访问发送给函数的第一个参数,同样使用~2
来访问第二个参数。TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
/S system | 指定要连接的远程系统 |
/U [domain]user | 指定命令应在其下执行的用户上下文 |
/P [password] | 指定给定用户上下文的密码。 提示输入,如果省略。 |
/M [module] | 列出当前使用给定的exe / dll名称的所有任务。 如果未指定模块名称,则显示所有已加载的模块。 |
/SVC | 显示每个进程中托管的服务。 |
/V | 显示详细的任务信息。 |
/FI filter | 显示一组符合过滤器指定条件的任务。 |
/FO format | 指定输出格式。 有效值:TABLE,LIST,CSV。 |
/NH | 指定“列标题”不应显示在输出中。 仅适用于TABLE和CSV格式。 |
:: 获取内存大于40MB的进程
tasklist /fi "memusage gt 40000"
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
/S system | 指定要连接的远程系统 |
/U [domain]user | 指定命令应在其下执行的用户上下文。 |
/P [password] | 指定给定用户上下文的密码。 提示输入,如果省略。 |
/FI FilterName | 应用过滤器来选择一组任务,允许使用*通配符。 |
/PID processID | 指定要终止的进程的PID。使用TaskList来获取PID。 |
/IM ImageName | 指定要终止的进程的映像名称。 通配符*可用于指定所有任务或图像名称。 |
/T | 终止指定的进程以及由其启动的任何子进程。 |
/F | 指定强制终止进程。 |
:: 杀死(终止)打开的记事本任务
taskkill /f /im notepad.exe
:: 杀死了一个ID为9901的进程
taskill /pid 9901
START "title" [/D path] [options] "command" [parameters]
title | CMD窗口标题栏的文本(必需) |
path | 起始目录。 |
command | 命令,批处理文件或可执行程序运行。 |
parameters | 传递给命令的参数 |
options:
/MIN | 启动窗口最小化。 |
/MAX | 启动窗口最大化。 |
/LOW | 使用IDLE优先级。 |
/NORMAL | 使用NORMAL优先级。 |
/ABOVENORMAL | 使用ABOVENORMAL优先级。 |
/BELOWNORMAL | 使用BELOWNORMAL优先级。 |
/HIGH | 使用HIGH优先级。 |
/REALTIME | 使用REALTIME优先级。 |
:: 在新窗口中运行批处理脚本test.bat。 窗口将以最小化模式启动,并且指定标题为:“Test Batch Script”。
START "Test Batch Script" /Min test.bat
:: 在另一个进程中运行Microsoft Word,然后在MS Word中打开文件TESTA.txt
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
dw=dir /w
当要执行dir /w命令时,可以简单地键入dw这个单词。dw这个词现在已经成为命令dir /w的别名。
DOSKEY [options] [macroname=[text]]
@echo off
doskey cd=cd/test
doskey d=dir
@echo off
doskey cd=cd/test
doskey d=dir
d=
将d的值设置为NULL,所以宏d将被删除。
|
)管道运算符(|)将一个命令的输出(默认为STDOUT)引导到另一个命令的输入(默认为STDIN)。
:: 两个命令同时启动,但是sort命令暂停,直到它接收到dir命令的输出。
:: sort命令使用dir命令的输出作为输入,然后将其输出发送到句柄1(即STDOUT)。
dir C:\ | sort
命令 | 备注 |
---|---|
VER | 显示正在使用的MS-DOS的版本 |
ASSOC | 这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联 |
cd | 更改不同的目录,或显示当前目录 |
CLS | 清屏 |
COPY | 文件复制 |
DEL | 删除文件 |
DIR | 列出目录内容 |
DATE | 系统日期 |
ECHO | 显示消息,或打开、关闭命令回显 |
EXIT | 退出DOS控制台 |
MD | 创建目录 |
MOVE | 移动文件或目录 |
PATH | 显示或设置路径变量 |
PAUSE | 等待输入 |
PROMPT | 用于更改或重置cmd.exe提示符 |
RD | 删除目录(需为空) |
REN | 重命名文件和目录 |
REM | 注释 |
START | 在新窗口中启动程序,或打开文档 |
TIME | 设置或显示时间 |
TYPE | 将文件或文件的内容打印到输出中 |
VOL | 显示卷标 |
ATTRIB | 显示或设置当前目录中的文件的属性 |
CHKDSK | 检查磁盘是否有问题 |
CHOICE | 为用户提供了一个选项列表 |
CMD | 调用另一个命令提示符实例 |
COMP | 根据文件大小比较2个文件 |
CONVERT | 将卷从FAT16或FAT32文件系统转换为NTFS文件系统 |
DRIVERQUERY | 显示所有已安装的设备驱动程序及其属性 |
EXPAND | 从压缩的.cab压缩文件中提取文件 |
FIND | 在文件或输入中搜索字符串,输出匹配的行 |
FORMAT | 将磁盘格式化为使用Windows支持的文件系统(如FAT,FAT32或NTFS),从而覆盖磁盘的先前内容 |
HELP | 显示Windows提供的命令的列表 |
IPCONFIG | 显示Windows IP配置。显示连接的配置和连接的名称 |
LABEL | 添加,设置或删除磁盘标签 |
MORE | 一次显示一个或多个文件的内容 |
NET | 根据使用的命令提供各种网络服务 |
PING | 通过网络将ICMP/IP “回显”发送到指定的地址的包 |
SHUTDOWN | 关闭计算机,或者注销当前用户 |
SORT | 从源文件获取输入,并按字母顺序排序其内容,从A到Z或从Z到A。它将在控制台上打印输出 |
SUBST | 将驱动器号分配给本地文件夹,显示当前分配或删除分配 |
SYSTEMINFO | 该批处理命令显示计算机及其操作系统的配置 |
TASKKILL | 该批处理命令结束一个或多个任务 |
TASKLIST | 列出任务,包括任务名称和进程标识(PID) |
XCOPY | 以更高级的方式复制文件和目录 |
TREE | 将当前目录的所有子目录的树显示为递归或深度的任何级别 |
FC | 列出两个文件之间的实际差异 |
DISKPART | 显示和配置磁盘分区的属性 |
TITLE | 该批处理命令设置控制台窗口中显示的标题 |
SET | 显示当前系统上的环境变量列表 |
/L
: for循环移动范围的/L
参数用于迭代数组。
/A
:数值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。