设为首页 收藏本站
查看: 614|回复: 0

[经验分享] WINDOWS命令和批处理

[复制链接]

尚未签到

发表于 2018-6-21 06:35:49 | 显示全部楼层 |阅读模式
  另外查看WIndows和Linux的所有命令:http://www.ss64.com/nt/。
  该教程一共分为4大部分,第一部分是批处理的专用命令,第二部分是特殊的符号与批处理,第三部分是批处理与变量,第四部分是完整案例。
  %~dp0 表示当前bat所在的目录。
  第一部分:批处理的专用命令
  批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令。
  1、 REM
  REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。
  2、 ECHO
  ECHO 是一个回显命令主要参数有OFF和 ON,一般用ECHO message来显示一个特定的消息,如果没有任何参数显示当前的echo的设置 。
  用法:
  ECHO [ON | OFF] :如果是OFF仅显示批处理的运行结果,如果是ON,不仅显示运行结果,而且显示此批处理的每一行,一般使用ON来调试。默认为ON。
  ECHO [message] :显示message。
  ECHO :显示当前的echo设置。
  3、 GOTO
  GOTO 即为跳转的意思。在批处理中允许以“:XXX”来构建一个标号然后用GOTO 标号 直接来执行标号后的命令。例
  :LABEL
  REM 上面就是名为LABEL的标号。
  DIR C:\\
  DIR D:\\
  GOTO LABEL
  REM 以上程序跳转标号LABEL处继续执行。
  4、CALL
  CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例:
  批处理2.BAT内容如下:
  ECHO 这就是2的内容
  批处理1.BAT内容如下:
  ECHO 这是1的内容
  CALL 2.BAT
  ECHO 1和2的内容全部显示完成
  执行结果如下:
  C:\\>1.BAT
  这是1的内容
  这就是2的内容
  1和2的内容全部显示完成
  5、PAUSE
  PAUSE 停止系统命令的执行并显示下面的内容。例:
  C:\\> PAUSE
  请按任意键继续 . . .
  6、 IF / ELSE
  IF 条件判断语句,语法格式如下:
  IF [NOT] DEFINED variable command
  IF [NOT] ERRORLEVEL number command
  IF CMDEXTVERSION number command
  IF [/I] [NOT] item1==item2 command
  IF [/I] item1 compare-op item2 command
  IF [/I] item1 compare-op item2 (command) ELSE (command)
  IF [NOT] EXIST filename command
  IF [NOT] EXIST filename (command) ELSE (command)
  说明:
  1)[NOT] 将返回的结果取反值即“如果没有”的意思。
  2)ERRORLEVEL 是命令执行完成后返回的退出值。Number 退出值的数字取值范围0~255。判断时值的排列顺序应该又大到小。返回的值大于或等于指定的值时条件成立。
  3)DEFINED 用来检测variable是否定义。
  4)item1==item2 此时的item为string,英文字符的大小写将看做不同,可以用/I来不区分大小写,这个条件中的等于号必须是2个(绝对相等),条件想等后即执行后面的 command 。
  5) 当item1和item2为数字时,compare-op可以为EQU : equal  NEQ : not equal LSS : less than < LEQ : less than or equal <= GTR : greater than > GEQ : greater than or equal >=。
  6)EXIST filename 为文件或目录存在的意思。
  7)IF ERRORLEVEL这条语句必须放在某一个命令后面。执行命令后由IF ERRORLEVEL来判断命令的返回值。
  实例:
  1) IF [NOT] ERRORLEVEL number command
  检测命令执行完后的返回值做出判断。
  echo off
  dir z:
  rem 如果退出代码为1(不成功)就跳至标题1处执行
  IF ERRORLEVEL 1 goto 1
  rem 如果退出代码为0(成功)就跳至标题0处执行
  IF ERRORLEVEL 0 goto 0
  :0
  echo 命令执行成功!
  Rem 程序执行完毕跳至标题exit处退出
  goto exit
  :1
  echo 命令执行失败!
  Rem 程序执行完毕跳至标题exit处退出
  goto exit
  :exit
  Rem 这里是程序的出口
  2)IF string1==string2 command
  检测当前变量的值做出判断
  ECHO OFF
  IF %1==2 goto no
  Echo 变量相等!
  Goto exit
  :no
  echo 变量不相等
  goto exit
  :exit
  大家可以这样看效果 C:\\>test.bat 数字
  3) IF [NOT] EXIST filename command
  发现特定的文件做出判断
  echo off
  IF not EXIST autoexec.bat goto 1
  echo 文件存在成功!
  goto exit
  :1
  echo 文件不存在失败!
  goto exit
  :exit
  这个批处理大家可以放在c盘和d盘分别执行看看效果。
  7、 FOR
  FOR这个命令比较特殊是一个循环执行命令的命令,同时FOR的循环里面还可以套用FOR在进行循环。这篇我们介绍基本的用法就不做套用的循环了,后面再来讲解套用的循环。在批处理中FOR的命令在批处理中如下:
  FOR [%%c] IN (set) DO [command] [arguments]
  在命令行中命令如下,少一个%:
  FOR [%c] IN (set) DO [command] [arguments]
  常用参数:
  1)无参数,表示循环处理文件夹下的所有文件。
  2)/R表示递归到子文件夹。
  3)/L 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。
  4)/D 处理多个文件夹。
  5)/F 从指定的文件中读取数据作为变量,或从一个命令的输出中读取数据。
  6)其他的选项:
  eol=c - 指一个行注释字符的结尾(就一个) ,
  skip=n - 指在文件开始时忽略的行数。
  delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
  tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
  usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。
  实例:
  1)会枚举当前环境中的环境变量名称。
  echo off
  FOR /F "delims==" %%G IN ('SET') DO @Echo %%G
  或
  echo off
  FOR /F "usebackq delims==" %%G IN (`SET`) DO @Echo %%G
  2)以下列举一个简单的例子,他将说明参数/L和没有参数的区别:
  删除文件1.TXT 2.TXT 3.TXT 4.TXT 5.TXT
  例:
  ECHO OFF
  FOR /L %%F IN (1,1,5) DO DEL %%F.TXT
  或
  FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT
  以上2条命令执行的结果都是一样的如下:
  C:\\>DEL 1.TXT
  C:\\>DEL 2.TXT
  C:\\>DEL 3.TXT
  C:\\>DEL 4.TXT
  C:\\>DEL 5.TXT
  8、 SETLOCAL
  开 始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行 ENDLOCAL。 达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。例:
  @ECHO OFF
  SET PATH /*察看环境变量PATH
  PAUSE
  SETLOCAL
  SET PATH=E:\\TOOLS /*重新设置环境变量PATH
  SET PATH
  PAUSE
  ENDLOCAL
  SET PATH
  从 上例我们可以看到环境变量PATH第1次被显示得时候是系统默认路径。被设置成了E:\\TOOLS后显示为E:\\TOOLS但当 ENDLOCAL后我们可以看到他又被还原成了系统的默认路径。但这个设置只在该批处理运行的时候有作用。当批处理运行完成后环境变量PATH将会还原。
  9、 SHIFT
  SHIFT命令可以让在命令上的的命令使用超过10个(%0~%9)以上的可替代参数例:
  ECHO OFF
  ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
  SHIFT
  ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
  SHIFT
  ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
  执行结果如下:
  C::\\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
  1 2 3 4 5 6 7 8 9
  2 3 4 5 6 7 8 9 10
  3 4 5 6 7 8 9 10 11
  以上就是基于WIN2000下的9个批处理命令。
  第二部分:特殊的符号与批处理
  在命令行下有些符号是不允许使用的但有些符号却有着特殊的意义。
  1、 符号(@)
  @在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echo off可以关掉整个批处理的命令回显但却不能不显示echo off这个命令。现在我们在这个命令前加上@这样echo off这一命令就被@关闭了回显从而达到所有命令均不回显得要求
  2、 符号(>)
  >的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)例:
  文件1.txt的文件内容为:
  1+1
  使用命令c:\\>dir *.txt >1.txt
  这时候1.txt的内容如下
  驱动器 C 中的卷没有标签。
  卷的序列号是 301A-1508
  C:\\ 的目录
  2003-03-11 14:04 1,005 FRUNLOG.TXT
  2003-04-04 16:38 18,598,494 log.txt
  2003-04-04 17:02 5 1.txt
  2003-03-12 11:43 0 aierrorlog.txt
  2003-03-30 00:35 30,571 202.108.txt
  5 个文件 18,630,070 字节
  0 个目录 1,191,542,784 可用字节
  >将命令执行的结果覆盖了原始的文件内容。
  在传递给控制台的时候程序将不会有任何回显(注意:这里的回显跟echo off关掉的回显不是同一概念。Echo off关掉的是输入命令的回显,这里的回显是程序执行中或后的回显)例:
  C:\\>dir *.txt >nul
  程序将没有任何显示也不会产生任何痕迹。
  3、 符号(>>)
  符号>>的作用与符号>相似,但他们的区别在于>>是传递并在文件末尾追加>>也可将回显传递给控制台(用法同上)例:
  文件1.txt内同为:
  1+1
  使用命令c:\\>dir *.txt >>1.txt
  这时候1.txt的内容如下
  1+1
  驱动器 C 中的卷没有标签。
  卷的序列号是 301A-1508
  C:\\ 的目录
  2003-03-11 14:04 1,005 FRUNLOG.TXT
  2003-04-04 16:38 18,598,494 log.txt
  2003-04-04 17:02 5 1.txt
  2003-03-12 11:43 0 aierrorlog.txt
  2003-03-30 00:35 30,571 202.108.txt
  5 个文件 18,630,070 字节
  0 个目录 1,191,542,784 可用字节
  >>将命令执行的结果覆加在了原始的文件内容后面。
  4、 符号(|)
  |是一个管道传输命令意思是将上一命令执行的结果传递给下一命令去处理。例:
  C:\\>dir c:\\|find "1508"
  卷的序列号是 301A-1508
  以上命令的意思为查找c:\\的所有并发现1508字符串。Find的用法请用 find /?自行查看
  在不使用format的自动格式化参数的时候我是这样来自动格式化盘片的
  echo y|fornat a: /s /q /v:system
  用过format命令的人都知道format有一个交互对化过程,要使用者输入y来确定当前的命令是否被执行。在这个命令前加上echo y并用管道传输符|将echo执行的结果y传递给format从而达到手工输入y的目的(这条命令有危害性,测试的时候请谨慎)
  5、 符号(^)
  ^ 是对特殊符号 > 、<、 &、的前导字符。在命令中他将以上的3个符号的特殊动能去掉仅仅只吧他们当成符号而不使用他们的特殊意义。例:
  c:\\>echo test ^> 1.txt
  test > 1.txt
  从上面可以看出并没有把test写入文件1.txt而是将test >1.txt 当字符串显示了出来。这个符号在远程构建批处理的时候很有效果。
  6、 符号(&)
  &符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行。例:
  c:\\> dir z:\\ &dir y:\\ &dir c:\\
  以上的命令将会连续显示z: y: c:盘内的内容不理会该盘符是否存在。
  7、 符号(&&)
  &&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行。例:
  c:\\> dir z:\\ &&dir y:\\ &&dir c:\\
  以上的命令将会提示检查是否存在z:盘如果存在则执行,如果不存在则停止执行所有的后续命令
  8、 符号(" ")
  " "符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法例:
  c:\\>cd “Program Files”
  c:\\>cd progra~1
  c:\\>cd pro*
  以上方法都可以进入Program Files目录
  9、 符号(,)
  ,符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例:
  c:\\>dir,c:\\
  10、 符号(;)
  ;符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行。例:
  DIR C:\\;D:\\;E:\\F:\\
  以上的命令相当于
  DIR C:\\
  DIR D:\\
  DIR E:\\
  DIR F:\\
  当然还有些特殊的符号但他们的使用范围很小我就不再这里一一的说明了。
  第三部分:批处理与变量
  在批处理中适当的引用变量将会使你所编制的程序应用面更广。批处理每次能处理的变量从%0~%9共10个。其中%0默认给批处理的文件名使用。除非在使用SHIFT命令后%0才能被%1所替代。引用shift命令的例子如果把%1前面多加上一个%0那么结果如下:
  C::\\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
  SHIFT.BAT 1 2 3 4 5 6 7 8 9
  1 2 3 4 5 6 7 8 9 10
  2 3 4 5 6 7 8 9 10 11
  系统是如何区分每个变量的呢,系统区分变量的规则为字符串中间的空格,即只要发现空格就把空格前面的字符当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名这时候你需要用上一节特殊符号8中所用的引号将他圈起来。例:
  批处理内容为:
  ECHO %1
  ECHO %2
  ECHO %3
  输入命令:
  C:\\>TEST “Program Files” Program Files
  Program Files
  Program
  Files
  在 一个复杂的批处理中又可能同时使用的变量会超过10个这时候会和系统的规则想冲突那么这个问题怎么解决呢?在系统中还有一种变量称之为环境变量(使用 SET命令可以查看当前系统的环境变量)如当前系统目录是%windir%或%SystemRoot%等。当同时使用的参数超过10个的时候,我们可以把 某些在后面的程序中还要调用的变量保存为环境变量。具体用法如 SET A=%1 这样我们就命名了一个新的环境变量A 在调用变量A的时候要%A%这样调用,环境变量不受SHIFT命令影响。如果要改变一个环境变量需要重新对其设置才能改变。当然也可以进行变量与变量之间 的传递来达到目的。下面我们来看一个例子,批处理如下:
  ECHO OFF
  SET PASS=%1
  SHIFT
  SET PASS1=%1
  SHIFT
  ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9
  SHIFT
  ECHO %PASS% %PASS1% %9
  SET PASS=%PASS1% 变量的传递
  SET PASS1=%9
  SHIFT
  ECHO %PASS% %PASS1% %9
  使用命令:C:\\>TEST A B 3 4 5 6 7 8 9 10 K L
  A B 3 4 5 6 7 8 9 10 K 注意:这一行显示了11个变量
  A B L 在使用了3次SHIFT之后%9变成了L
  B L 变量的传递后的结果
  第四部分:完整案例
  实例1列举进程.bat:
  @echo for each ps in getobject _ >ps.vbs
  @echo ("winmgmts:\\.\root\cimv2:win32_process").instances_ >>ps.vbs
  @echo wscript.echo ps.handle^&vbtab^&ps.name^&vbtab^&ps.executablepath:next >>ps.vbs
  cscript //nologo ps.vbs & del ps.vbs
  pause
  实例2查看电脑硬件信息.bat:
  start C:\WINDOWS\PCHealth\HelpCtr\System\sysinfo\sysComponentInfo.htm
  实例3查看进程使用的端口.bat:
  @echo off
  color 1f
  Title XP端口-进程查询
  setlocal enabledelayedexpansion
  echo ╔-                              -╗
  echo   本机开放的端口及使用该端口的进程
  echo ╚-                              -╝
  echo ------------------------------------
  echo          端口号           进程名称
  ECHO TCP协议:
  ::利用netstat命令找出使用TCP协议通信的端口,并将结果分割;
  ::将第二个参数(IP加端口)传给%%i,第五个参数(PID号)传给%%j;
  for /F "usebackq skip=4 tokens=2,5" %%i in (`"netstat -ano -p TCP"`) do (
  call :Assoc %%i TCP %%j
  echo           !TCP_Port!           !TCP_Proc_Name!
  )
  ECHO UDP协议:
  for /F "usebackq skip=4 tokens=2,4" %%i in (`"netstat -ano -p UDP"`) do (
  call :Assoc %%i UDP %%j
  echo           !UDP_Port!           !UDP_Proc_Name!
  )
  echo 按任意键退出
  pause>nul
  :Assoc
  ::对%1(第一个参数)进行分割,将第二个参数传给%%e。在本程序中,%1即为上面的%%i(形式为:IP:端口号)
  for /F "tokens=2 delims=:" %%e in ("%1") do (
  set  %2_Port=%%e
  )
  :: 查询PID等于%3(第三个参数)的进程,并将结果传给变量?_Proc_Name,?代表UDP或者TCP;
  for /F "skip=2 usebackq delims=, tokens=1" %%a in (`"Tasklist /FI "PID eq %3" /FO CSV"`) do (
  ::%%~a表示去掉%%a外面的引号,因为上述命令的结果是用括号括起来的。
  set %2_Proc_Name=%%~a
  )
  实例4查看网关的MAC地址.bat:
  @echo off
  set /p getway="请输入网关IP地址:"%getway%
  arp -a|find "%getway% "
  pause
  实例5显示网络配置.bat:
  @echo off
  :: 代码编写:3742668 代码修订:namejm www.cn-dos.net
  ::调用格式:
  call :select "ip address" "ip"
  call :select "Physical Address" "mac"
  call :select "Default Gateway" "gateway"
  call :select "DNS Servers" "dns"
  call :select "Description" "netcard"
  :: 演示效果
  echo IP:%ip%
  echo MAC:%mac%
  echo DNS:%dns%
  echo GATEWAY:%gateway%
  echo NETCARD:%netcard%
  pause>nul
  goto :eof
  ::**************************************************************
  ::              解析ipconfig命令输出通用函数
  ::**************************************************************
  :select
  for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do if not "!%~2!" == "" set "%~2=%%i"
  goto :eof
  实例6中文显示ping结果.bat:
  @echo off
  color f2
  echo.
  set for=于
  set of=的
  set with=用
  set in=(以
  set data:=数据
  set milli-seconds:=毫秒为单位)
  set Approximate=大约
  set times=时间:
  set round=来回
  set trip=行程
  set Reply=应答
  set from=来自
  set bytes=字节
  set time=时间:
  set timed=时间
  set out=超过
  set statistics=统计
  set Packets:=包:
  set Sent=已发送=
  set Received=已收到=
  set Lost=已丢失=
  set loss)=丢失)
  set Minimum=最小值=
  set Maximum=最大值=
  set Average=平均值=
  set TTL=TTL=
  setlocal enabledelayedexpansion
  set a=
  set/p a=请输入要ping的网址或IP
  for /f "delims=" %%i in ('ping %a%') do (
  set ret=
  for %%a in (%%i) do if defined %%a (set ret=!ret!!%%a!) else set ret=!ret! %%a
  if not "!ret!"=="" (set ret=!ret:time=时间! && echo !ret!) else echo.
  )
  pause>nul
  完!
  来源: <http://www.cnblogs.com/itech/archive/2009/04/15/1436409.html>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-527964-1-1.html 上篇帖子: php在windows上扩展pthreads多线程 下篇帖子: Windows 2008 限制IP连接方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表