bat批处理切换到当前脚本所在⽂件夹
切换到当前脚本所在的⽂件夹
cd  %~dp0
另外附上⼀些bat基本内容
——————————————————————————————
批处理常⽤命令总结 - 批处理命令简介
⽬录
echo
打开回显或关闭请求回显功能,或显⽰消息。如果没有任何参数,echo 命令将显⽰当前回显设置。
echo [{on|off}] [message]
Sample:@echo off / echo hello world
在实际应⽤中我们会把这条命令和重定向符号(也称为管道符号,⼀般⽤> >> ^)结合来实现输⼊⼀些命令到特定的⽂件中。
rem
注释命令,类似于在C语⾔中的/*--------*/,它并不会被执⾏,只是起⼀个注释的作⽤,便于别⼈阅读和你⾃⼰⽇后修改。
Rem Message
Sample:@Rem Here is the description.
pause
暂停命令。运⾏ Pause 命令时,将显⽰下⾯的消息:Press any key to continue. . .(或:请按任意键继续. . .)
Sample:
@echo off
:
begin
copy G:*.* d:/back
echo 请插⼊另⼀张光盘...
pause
goto begin
在这个例⼦中,驱动器 G 中磁盘上的所有⽂件均复制到d:/back中。显⽰的注释提⽰您将另⼀张光盘盘放⼊驱动器 G 时,pause 命令会使程序挂起,以便您更换光盘,然后按任意键继续处理。
call
从⼀个批处理程序调⽤另⼀个批处理程序,并且不终⽌⽗批处理程序。call 命令接受⽤作调⽤⽬标的标签。如果在脚本或批处理⽂件外使⽤Call,它将不会在命令⾏起作⽤。
call [[Drive:][Path] FileName ] [:label [arguments]]
参数
[Drive:}[Path] FileName
指定要调⽤的批处理程序的位置和名称。
start 命令
调⽤外部程序,所有的DOS命令和命令⾏程序都可以由start命令来调⽤。如: 即可打开Windows的计算器。
当前页面脚本发生错误
常⽤参数:
MIN 开始时窗⼝最⼩化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应⽤程序
REALTIME 在 REALTIME 优先级类别开始应⽤程序
WAIT 启动应⽤程序并等候它结束
parameters 这些为传送到命令/程序的参数
执⾏的应⽤程序是 32-位 GUI 应⽤程序时,CMD.EXE 不等应⽤程序终⽌就返回命令提⽰。如果在命令脚本内执⾏,该新⾏为则不会发⽣。
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命令就是根据这个:来寻下⼀步跳到到那⾥。最好有⼀些说明这样你别⼈看起来才会理解你的意图啊。
set
显⽰、设置或删除变量
显⽰变量:set 或 set s 前者显⽰批处理当前已定义的所有变量及其值,后者显⽰所有以s开头的变量及值。
设置变量:set aa=abcd 此句命令便可向变量aa赋值abcd。
如果变量aa已被定义,则aa的值被修改为abcd;若aa尚未定义,则此句命令即可定义新的变量aa,同时为变量aa赋予初始值abcd。
删除变量:set aa= 此句命令即可删除变量aa。若变量aa已被定义,则删除变量aa;若aa尚未定义,则此句命令为实质意义。
需要说明的是,批处理中的变量是不区分类型的,不需要像C语⾔中的变量那样还要区分int、float、char等。⽐如执⾏set aa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
set命令具有扩展功能,如⽤作交互输⼊、字符串处理、数值计算等,属于⾼级命令范畴。
批处理常⽤命令及⽤法⼤全
阅读下⾯⽂字需要⼀定的dos基础概念,象:盘符、⽂件、⽬录(⽂件夹)、⼦⽬录、根⽬录、当前⽬录
每个命令的完整说明请加 /? 参数参考微软的帮助⽂档可以看到,在 /? 帮助⾥,"命令扩展名"⼀词会经常出现"命令扩展名"是指相对于win98的dos版本⽽⾔,每个命令新增的功能命令测试环境win2000proSP4win98的命令功能太少,就不作研究了。
注:如果对某⼀命令还不是很熟悉,可以在命令⾏窗⼝下输⼊:命令名/?的⽅式来获得帮助。
例如:对dir命令的应⽤不熟悉,可以在命令⾏窗⼝下输⼊:dir /?
echo 和 @回显控制命令
@                    #关闭单⾏回显
echo off            #从下⼀⾏开始关闭回显
@echo off            #从本⾏开始关闭回显。⼀般批处理第⼀⾏都是这个
echo on              #从下⼀⾏开始打开回显
echo                #显⽰当前是 echo off 状态还是 echo on 状态
echo.                #输出⼀个"回车换⾏",⼀般就是指空⽩⾏
echo hello world    #输出hello world
"关闭回显"是指运⾏批处理⽂件时,不显⽰⽂件⾥的每条命令,只显⽰运⾏结果批处理开始和结束时,系统都会⾃动打开errorlevel程序返回码
echo %errorlevel%每个命令运⾏结束,可以⽤这个命令⾏格式查看返回码⽤于判断刚才的命令是否执⾏成功默认值为0,
⼀般命令执⾏出错会设 errorlevel 为1
dir显⽰⽬录中的⽂件和⼦⽬录列表
dir                #显⽰当前⽬录中的⽂件和⼦⽬录
dir /a              #显⽰当前⽬录中的⽂件和⼦⽬录,包括隐藏⽂件和系统⽂件
dir c: /a:d        #显⽰ C 盘当前⽬录中的⽬录
dir c:/ /a:-d      #显⽰ C 盘根⽬录中的⽂件dir d:/mp3 /b/p    #逐屏显⽰ d:/mp3 ⽬录⾥的⽂件,只显⽰⽂件名,不显⽰时间和⼤⼩dir *.exe /s        #显⽰当前⽬录和⼦⽬录⾥所有的.exe⽂件其中 * 是通配符,代表所有的⽂件名,还⼀个通配符 ? 代表⼀个
#任意字母或汉字如 c*.* 代表以 c 开头的所有⽂件?.exe 代表所有⽂件名是⼀个字母的.exe⽂件如果指定的⽬录或⽂件                    #不存在,将返回 errorlevel 为1;
# 每个⽂件夹的 dir 输出都会有2个⼦⽬录 . 和 ... 代表当前⽬录.. 代表当前⽬录的上级⽬录
dir .              #显⽰当前⽬录中的⽂件和⼦⽬录
dir ..              #显⽰当前⽬录的上级⽬录中的⽂件和⼦⽬录
其它参数可参考 dir /?
cd更改当前⽬录
cd mp3              #进⼊当前⽬录中的mp3 ⽬录
cd ..              #进⼊当前⽬录中的上级⽬录
cd/                #进⼊根⽬录
cd                  #显⽰当前⽬录
cd /d d:/mp3        #可以同时更改盘符和⽬录
cd "Documents and Settings"/All users⽂件名带空格,路径前需要加上引号!!如果更改到的⽬录不存在,则出错返
md abc              #在当前⽬录⾥建⽴⼦⽬录 abc
md d:/a/b/c        #如果 d:/a 不存在,将会⾃动创建
rd abc              #删除当前⽬录⾥的 abc ⼦⽬录,要求为空⽬录
rd /s/q d:/temp    #删除 d:/temp ⽂件夹及其⼦⽂件夹和⽂件,不需要按 Y 确认
del d:/    #删除指定⽂件,不能是隐藏、系统、只读⽂件
del *.*删除当前⽬录⾥的所有⽂件,不包括隐藏、系统、只读⽂件,要求按 Y 确认
del /q/a/f d:/temp/*.*删除 d:/temp ⽂件夹⾥⾯的所有⽂件,包括隐藏、只读、系统⽂件,不包括⼦⽬录
del /q/a/f/s d:/temp/*.*删除 d:/temp 及⼦⽂件夹⾥⾯的所有⽂件,包括隐藏、只读、系统⽂件,不包括⼦⽬录
2.bak    #把 1.txt 更名为 2.bak
ren *.txt *.ini    #把当前⽬录⾥所有.txt⽂件改成.ini⽂件
ren d:/temp tmp    #⽀持对⽂件夹的重命名
type c:/boot.ini    #显⽰指定⽂件的内容,程序⽂件⼀般会显⽰乱码
type *.txt          #显⽰当前⽬录⾥所有.txt⽂件的内容
copy c:/ d:/复制 c:/ ⽂件到 d:/
copy c:/ d:/test.bak复制 c:/ ⽂件到 d:/ ,并重命名为 test.bak
copy c:/*.*复制 c:/ 所有⽂件到当前⽬录,不包括隐藏⽂件和系统⽂件不指定⽬标路径,则默认⽬标路径为当前⽬录
copy 从屏幕上等待输⼊,按 Ctrl+Z 结束输⼊,输⼊内容存为⽂件con代表屏幕,prn代表打印机,nul代表空设备 + 2.合并 1.txt 和 2.txt 的内容,保存为 3.txt ⽂件如果不指定 3.txt ,则保存到 1.txt
+复制⽂件到⾃⼰,实际上是修改了⽂件⽇期
title 新标题        #可以看到cmd窗⼝的标题栏变了
14 label 和 vol设置卷标
vol                #显⽰卷标
label              #显⽰卷标,同时提⽰输⼊新卷标
label c:system      #设置C盘的卷标为 system
md创建⽬录
rd删除⽬录
del删除⽂件
ren⽂件重命名
cls清屏
type显⽰⽂件内容
copy拷贝⽂件
title设置cmd窗⼝的标题
ver显⽰系统版本
pause暂停命令
运⾏该命令时,将显⽰消息:请按任意键继续 . . .,⼀般⽤于看清楚屏幕上显⽰的内容
rem 和 ::注释命令
注释⾏不执⾏操作
date 和 time⽇期和时间
date          #显⽰当前⽇期,并提⽰输⼊新⽇期,按"回车"略过输⼊
date/t        #只显⽰当前⽇期,不提⽰输⼊新⽇期
time          #显⽰当前时间,并提⽰输⼊新时间,按"回车"略过输⼊
time/t        #只显⽰当前时间,不提⽰输⼊新时间
:label        #⾏⾸为:表⽰该⾏是标签⾏,标签⾏不执⾏操作
goto label    #跳转到指定的标签那⼀⾏
find "abc" c:/在 c:/ ⽂件⾥查含 abc 字符串的⾏如果不到,将设 errorlevel 返回码为1
find /i "abc" c:/查含 abc 的⾏,忽略⼤⼩写
find /c "abc" c:/显⽰含 abc 的⾏的⾏数
more c:/    #逐屏显⽰ c:/ 的⽂件内容
tree d:/            #显⽰D盘的⽂件⽬录结构
c: & cd/ & dir /w相当于把下⾯3⾏命令写到1⾏去了c:cd/dir /w
f: && cd/ && dir >c:/注意如果f盘不存在,那么后⾯2条命令将不会执⾏
find "ok" c:/ && echo 成功如果到了"ok"字样,就显⽰"成功",不到就不显⽰
find "ok" c:/ || echo 不成功如果不到"ok"字样,就显⽰"不成功",到了就不显⽰
goto 和 :跳转命令
find (外部命令)查命令
more (外部命令)逐屏显⽰
tree显⽰⽬录结构
&顺序执⾏多条命令,⽽不管命令是否执⾏成功
&&顺序执⾏多条命令,当碰到执⾏出错的命令后将不执⾏后⾯的命令
||顺序执⾏多条命令,当碰到执⾏正确的命令后将不执⾏后⾯的命令
|管道命令
前⼀个命令的执⾏结果输出到后⼀个命令
dir *.* /s/a | find /c ".exe"管道命令表⽰先执⾏ dir 命令,对其输出的结果执⾏后⾯的 find 命令该命令⾏结果:
输出当前⽂件夹及所有⼦⽂件夹⾥的.exe⽂件的个数
type c:/re这个和 more c:/ 的效果是⼀样的
> 和 >>输出重定向命令
> 清除⽂件中原有的内容后再写⼊
>> 追加内容到⽂件末尾,⽽不会清除原有的内容主要将本来显⽰在屏幕上的内容输出到指定⽂件中指定⽂件如果不存在,则⾃动⽣成该⽂件
echo hello world>c:/  ⽣成c:/⽂件,内容为hello world这个格式在批处理⽂件⾥⽤得很多,可以⽣成.reg .bat .vbs 等临时⽂件type c:/ >prn          屏幕上不显⽰⽂件内容,转向输出到打印机
echo hello world>con          在屏幕上显⽰hello world,实际上所有输出都是默认 >con 的
copy c:/ f: >nul      拷贝⽂件,并且不显⽰"⽂件复制成功"的提⽰信息,但如果f盘不存在,还是会显⽰出错信息
copy c:/ f: >nul 2>nul 不显⽰"⽂件复制成功"的提⽰信息,并且f盘不存在的话,也不显⽰错误提⽰信息
echo ^^W ^> ^W>c:/    ⽣成的⽂件内容为 ^W > W^ 和 > 是控制命令,要把它们输出到⽂件,必须在前⾯加个 ^符号< 从⽂件中获得输⼊信息,⽽不是从屏幕上
⼀般⽤于 date time label 等需要等待输⼊的命令,这样就可以不等待输⼊直接修改当前⽇期
@echo off
echo 2005-05-01&
date &
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*命令⾏传递给批处理的参数
%0 批处理⽂件本⾝
%1 第⼀个参数
%9 第九个参数
%* 从第⼀个参数开始的所有参数
在C盘根⽬录新建test.bat,内容如下:
@echo off
echo %0
echo %1
echo %2
echo %*
运⾏cmd,输⼊ c:/test.bat "/a" /b /c /d,可以看出每个参数的含意修改test.bat内容如下
@echo off
echo %1
echo %~1
echo %0
echo %~f0
echo %~d0
echo %~p0
echo %~n0
echo %~x0
echo %~s0
echo %~a0
echo %~t0
echo %~z0
再运⾏cmd,输⼊ c:/test.bat "/a" /b /c /d可以参照 call/? 或 for/? 看出每个参数的含意,注意这⾥可以对⽂件进⾏⽇期⽐较和⼤⼩⽐较:echo load "%%1" "%%2">c:/
⽣成的⽂件内容为 load "%1" "%2"批处理⽂件⾥,⽤这个格式把命令⾏参数输出到⽂件
set设置变量
引⽤变量可在变量名前后加 % ,即 %变量名%
set                    #显⽰⽬前所有可⽤的变量,包括系统变量和⾃定义的变量
echo %SystemDrive%    #显⽰系统盘盘符。系统变量可以直接引⽤
set p                  #显⽰所有以p开头的变量,要是⼀个也没有就设errorlevel=1
set p=aa1bb1aa2bb2    #设置变量p,并赋值为 = 后⾯的字符串,即aa1bb1aa2bb2
echo %p%              #显⽰变量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6%            #显⽰变量p中第6个字符以后的所有字符,即aa2bb2
echo %p:~6,3%          #显⽰第6个字符以后的3个字符,即aa2
echo %p:~0,3%          #显⽰前3个字符,即aa1