想学批处理的看这里3

-------------------------------------------------------------------------------------------------------------------
26 > 和 >>
输出重定向命令

> 清除文件中原有的内容后再写入

>> 追加内容到文件末尾,而不会清除原有的内容
主要将本来显示在屏幕上的内容输出到指定文件中
指定文件如果不存在,则自动生成该文件

echo hello world>c:\\test.txt
生成c:\\test.txt文件,内容为hello world
这个格式在批处理文件里用得很多,可以生成 .reg .bat .vbs 等临时文件

type c:\\test.txt >prn
屏幕上不显示文件内容,转向输出到打印机

echo hello world>con
在屏幕上显示hello world,实际上所有输出都是默认 >con 的

copy c:\\test.txt f: >nul
拷贝文件,并且不显示"文件复制成功"的提示信息,
但如果f盘不存在,还是会显示出错信息

copy c:\\test.txt f: >nul 2>nul
不显示"文件复制成功"的提示信息,
并且f盘不存在的话,也不显示错误提示信息

echo ^^W ^> ^W>c:\\test.txt
生成的文件内容为 ^W > W
注意 ^ 和 > 是控制命令,要把它们输出到文件,必须在前面加个 ^ 符号

-------------------------------------------------------------------------------------------------------------------
27 <
从文件中获得输入信息,而不是从屏幕上

一般用于 date time label 等需要等待输入的命令
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
这样就可以不等待输入直接修改当前日期

-------------------------------------------------------------------------------------------------------------------
28 %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

结果为:
"/a"
/a
c:\\test.bat
c:\test.bat
c:
test
.bat
c:\test.bat
--a------
2006-11-21 19:13
136

可以参照 call/? 或 for/? 看出每个参数的含意
注意这里可以对文件进行日期比较和大小比较

echo load "%%1" "%%2">c:\\test.txt
生成的文件内容为 load "%1" "%2"
批处理文件里,用这个格式把命令行参数输出到文件

-------------------------------------------------------------------------------------------------------------------
29 if
判断命令

if "%1"=="/a" echo 第一个参数是/a

if /i "%1" equ "/a" echo 第一个参数是/a
/i 表示不区分大小写,equ 和 == 是一样的,其它运算符参见 if/?

if exist c:\\test.bat echo 存在c:\\test.bat文件


if not exist c:\\windows (
   echo 不存在c:\\windows文件夹
   rem 有多条命令可用小括号括起来,称为"复合语句"
   rem 行前的空格是为了看起来条理清楚
   )


if exist c:\\test.bat (
   echo 存在c:\\test.bat  
   ) else (
   echo 不存在c:\\test.bat
   rem else表示"否则",判断结果为假时执行其后的命令
   )

-------------------------------------------------------------------------------------------------------------------









































30 setlocal 和 endlocal
设置"命令扩展名"和"延缓环境变量扩充"

SETLOCAL ENABLEEXTENSIONS      #启用"命令扩展名"
SETLOCAL DISABLEEXTENSIONS      #停用"命令扩展名"
SETLOCAL ENABLEDELAYEDEXPANSION   #启用"延缓环境变量扩充"
SETLOCAL DISABLEDELAYEDEXPANSION   #停用"延缓环境变量扩充"
ENDLOCAL               #恢复到使用SETLOCAL语句以前的状态

"命令扩展名"默认为启用
"延缓环境变量扩充"默认为停用
批处理结束系统会自动恢复默认值

可以修改注册表以禁用"命令扩展名",详见 cmd /? 。
所以用到"命令扩展名"的程序,建议在开头和结尾加上
SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 语句,
以确保程序能在其它系统上正确运行

"延缓环境变量扩充"主要用于 if 和 for 的符合语句,
在 set 的说明里有其实用例程

-------------------------------------------------------------------------------------------------------------------
31 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
echo %p:~-2%      #显示最后面的2个字符,即b2
echo %p:~0,-2%     #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
echo %p:aa=c%     #用c替换变量p中所有的aa,即显示c1bb1c2bb2
echo %p:aa=%      #将变量p中的所有aa字符串置换为空,即显示1bb12bb2
echo %p:*bb=c%     #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
set p=%p:*bb=c%    #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
set /a p=39      #设置p为数值型变量,值为39
set /a p=39/10     #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
set /a p=p/10     #用 /a 参数时,在 = 后面的变量可以不加%直接引用
set /a p="1&0"     #"与"运算,要加引号。其它支持的运算符参见set/?
set p=         #取消p变量

set /p p=请输入
屏幕上显示"请输入",并会将输入的字符串赋值给变量p
注意这条可以用来取代 choice 命令

注意变量在 if 和 for 的复合语句里是一次性全部替换的,如

@echo off
set p=aaa
if %p%==aaa (
  echo %p%
  set p=bbb
  echo %p%
  )

结果将显示
aaa
aaa

因为在读取 if 语句时已经将所有 %p% 替换为aaa
这里的"替换",在 /? 帮助里就是指"扩充"、"环境变量扩充"
可以启用"延缓环境变量扩充",用 ! 来引用变量,即 !变量名!

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
  echo %p%
  set p=bbb
  echo !p!
  )
ENDLOCAL

结果将显示
aaa
bbb

还有几个动态变量,运行 set 看不到
%CD%         #代表当前目录的字符串
%DATE%        #当前日期
%TIME%        #当前时间
%RANDOM%       #随机整数,介于0~32767
%ERRORLEVEL%     #当前 ERRORLEVEL 值
%CMDEXTVERSION%    #当前命令处理器扩展名版本号
%CMDCMDLINE%     #调用命令处理器的原始命令行

可以用echo命令查看每个变量值,如 echo %time%
注意 %time% 精确到毫秒,在批处理需要延时处理时可以用到

-------------------------------------------------------------------------------------------------------------------
32 start
批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令

start explorer d:\调用图形界面打开D盘

@echo off
cd /d %~dp0 :: %~dp0 代表本文件所在盘符和路径,此例中本批处理需与劲舞团.reg、patcher.exe在同一文件夹
regedit /s 劲舞团.reg
start patcher.exe

不加 start 命令的话,"劲舞团"运行时,后面会有个黑乎乎的cmd窗口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟V-SpHeNIC

支持科研技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值