您的位置:首页 > 其它

windows batch 常用命令

2014-02-25 19:51 232 查看


转载: http://www.oschina.net/code/snippet_158297_4964

001
1
echo

和@
002
回显命令
003
@                    
#关闭单行回显
004
echo
off             
#从下一行开始关闭回显
005
@
echo

off            
#从本行开始关闭回显。一般批处理第一行都是这个
006
echo
on              
#从下一行开始打开回显
007
echo
                 
#显示当前是 echo off 状态还是 echo on 状态
008
echo
.                
#输出一个”回车换行”,空白行
009
                         
#(同echo, echo; echo+ echo[ echo] echo/ echo)
010
 
011
2 errorlevel
012
echo
%errorlevel%
013
每个命令运行结束,可以用这个命令行格式查看返回码
014
默认值为0,一般命令执行出错会设 errorlevel 为1
015
 
016
3
dir
017
显示文件夹内容
018
dir
                 
#显示当前目录中的文件和子目录
019
dir
/a              
#显示当前目录中的文件和子目录,包括隐藏文件和系统文件
020
dir
c: /a:d         
#显示 C 盘当前目录中的目录
021
dir
c: /a:-d        
#显示 C 盘根目录中的文件
022
dir
c: /b/p        
#/b只显示文件名,/p分页显示
023
dir
*.exe /s        
#显示当前目录和子目录里所有的.exe文件
024
 
025
4
cd
026
切换目录
027
cd
                 
#进入根目录
028
cd
                  
#显示当前目录
029
cd
/d d:sdk        
#可以同时更改盘符和目录
030
 
031
5 md
032
创建目录
033
md d:abc         
#如果 d:a 不存在,将会自动创建中级目录
<
4000
tbody>
034
#如果命令扩展名被停用,则需要键入 mkdir abc。
035
 
036
6 rd
037
删除目录
038
rd abc              
#删除当前目录里的 abc 子目录,要求为空目录
039
rd /s/q d:temp     
#删除 d:temp 文件夹及其子文件夹和文件,/q安静模式
040
 
041
7 del
042
删除文件
043
del d:
test
.txt     
#删除指定文件,不能是隐藏、系统、只读文件
044
del /q/a/f d:temp*.*
045
删除 d:temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录
046
del /q/a/f/s d:temp*.*
047
删除 d:temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录
048
 
049
8 ren
050
重命名命令
051
ren d:temp tmp     
#支持对文件夹的重命名
052
 
053
9 cls
054
清屏
055
 
056
10
type
057
显示文件内容
058
type
c:boot.ini    
#显示指定文件的内容,程序文件一般会显示乱码
059
type
*.txt          
#显示当前目录里所有.txt文件的内容
060
 
061
11copy
062
拷贝文件
063
copyc:
test
.txt d:
test
.bak
064
复制 c:
test
.txt 文件到 d: ,并重命名为
test
.bak
065
copycon
test
.txt
066
从屏幕上等待输入,按 Ctrl+Z 结束输入,输入内容存为
test
.txt文件
067
con代表屏幕,prn代表打印机,nul代表空设备
068
copy1.txt + 2.txt 3.txt
069
合并 1.txt 和2.txt 的内容,保存为 3.txt 文件
070
如果不指定 3.txt ,则保存到 1.txt
071
copy
test
.txt +
072
复制文件到自己,实际上是修改了文件日期
073
 
074
12 title
075
设置cmd窗口的标题
076
title 新标题        
#可以看到cmd窗口的标题栏变了
077
 
078
13ver
079
显示系统版本
080
 
081
14label 和vol
082
设置卷标
083
vol                 
#显示卷标
084
label               
#显示卷标,同时提示输入新卷标
085
label c:system      
#设置C盘的卷标为 system
086
 
087
15 pause
088
暂停命令
089
 
090
16 rem 和::
091
注释命令
092
注释行不执行操作
093
 
094
17
date

time
095
日期和时间
096
date
          
#显示当前日期,并提示输入新日期,按"回车"略过输入
097
date
/t        
#只显示当前日期,不提示输入新日期
098
time
          
#显示当前时间,并提示输入新时间,按"回车"略过输入
099
time
/t        
#只显示当前时间,不提示输入新时间
100
 
101
18 goto 和:
102
跳转命令
103
:label        
#行首为:表示该行是标签行,标签行不执行操作
104
goto label    
#跳转到指定的标签那一行
105
 
106
19
find

(外部命令)
107
查找命令
108
find
"abc"
c:
test
.txt
109
在 c:
test
.txt 文件里查找含 abc 字符串的行
110
如果找不到,将设 errorlevel 返回码为1
111
find
/i “abc” c:
test
.txt
112
查找含 abc 的行,忽略大小写
113
find
/c
"abc"
c:
test
.txt
114
显示含 abc 的行的行数
115
 
116
20
more

(外部命令)
117
逐屏显示
118
more
c:
test
.txt    
#逐屏显示 c:test.txt 的文件内容
119
 
120
21tree
121
显示目录结构
122
tree d:            
#显示D盘的文件目录结构
123
 
124
22 &
125
顺序执行多条命令,而不管命令是否执行成功
126
 
127
23&&
128
顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
129
find
"ok"
c:
test
.txt &&
echo
成功
130
如果找到了
"ok"
字样,就显示
"成功"
,找不到就不显示
131
 
132
24||
133
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
134
find
"ok"
c:
test
.txt ||
echo
不成功
135
如果找不到
"ok"
字样,就显示
"不成功"
,找到了就不显示
136
 
137
25 |
138
管道命令
139
dir
*.* /s/a |
find
/c
".exe"
140
管道命令表示先执行
dir

命令,对其输出的结果执行后面的
find

命令
141
该命令行结果:输出当前文件夹及所有子文件夹里的.exe文件的个数
142
type
c:
test
.txt|
more
143
这个和
more

c:
test
.txt 的效果是一样的
144
 
145
26 > 和>>
146
输出重定向命令
147
> 清除文件中原有的内容后再写入
148
>> 追加内容到文件末尾,而不会清除原有的内容
149
主要将本来显示在屏幕上的内容输出到指定文件中
150
指定文件如果不存在,则自动生成该文件
151
type
c:
test
.txt >prn
152
屏幕上不显示文件内容,转向输出到打印机
153
echo
hello world>con
154
在屏幕上显示hello world,实际上所有输出都是默认 >con 的
155
copyc:
test
.txt f: >nul
156
拷贝文件,并且不显示
"文件复制成功"
的提示信息,但如果f盘不存在,还是会显示出错信息
157
copyc:
test
.txt f: >nul 2>nul
158
不显示”文件复制成功”的提示信息,并且f盘不存在的话,也不显示错误提示信息
159
echo
^^W ^> ^W>c:
test
.txt
160
生成的文件内容为 ^W > W
161
^ 和> 是控制命令,要把它们输出到文件,必须在前面加个 ^ 符号
162
 
163
27 <
164
从文件中获得输入信息,而不是从屏幕上
165
一般用于
date

time
label 等需要等待输入的命令
166
@
echo

off
167
echo
2005-05-01>temp.txt
168
date
<temp.txt
169
del temp.txt
170
这样就可以不等待输入直接修改当前日期
171
 
172
28 %0 %1%2 %3%4%5 %6 %7 %8 %9 %*
173
命令行传递给批处理的参数
174
%0 批处理文件本身
175
%1第一个参数
176
%9 第九个参数
177
%* 从第一个参数开始的所有参数
178
 
179
批参数(%n)的替代已被增强。您可以使用以下语法:
180
 
181
     
%~1          - 删除引号("),扩充 %1
182
     
%~f1         - 将 %1扩充到一个完全合格的路径名
183
     
%~d1         - 仅将 %1扩充到一个驱动器号
184
     
%~p1         - 仅将 %1扩充到一个路径
185
     
%~n1         - 仅将 %1扩充到一个文件名
186
     
%~x1         - 仅将 %1扩充到一个文件扩展名
187
     
%~s1         - 扩充的路径指含有短名
188
     
%~a1         - 将 %1扩充到文件属性
189
     
%~t1         - 将 %1扩充到文件的日期/时间
190
     
%~z1         - 将 %1扩充到文件的大小
191
     
%~$PATH : 1- 查找列在 PATH 环境变量的目录,并将 %1
192
                   
扩充到找到的第一个完全合格的名称。如果环境
193
                   
变量名未被定义,或者没有找到文件,此组合键会
194
                   
扩充到空字符串
195
 
196
可以组合修定符来取得多重结果:
197
 
198
    
%~dp1        - 只将 %1扩展到驱动器号和路径
199
    
%~nx1        - 只将 %1扩展到文件名和扩展名
200
    
%~dp$PATH:1- 在列在 PATH 环境变量中的目录里查找 %1,
201
                   
并扩展到找到的第一个文件的驱动器号和路径。
202
    
%~ftza1      - 将 %1扩展到类似 DIR 的输出行。
203
可以参照 call/? 或
for
/? 看出每个参数的含意
204
echo
load
"%%1"
"%%2"
>c:
test
.txt
205
生成的文件内容为 load
"%1"

"%2"
206
批处理文件里,用这个格式把命令行参数输出到文件
207
 
208
29
if
209
判断命令
210
if
"%1"
==
"/a"

echo
第一个参数是/a
211
if
/i
"%1"
equ

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

if
/?
213
if
exist c:
test
.bat
echo
存在c:
test
.bat文件
214
if
not exist c:windows (
215
     
echo

不存在c:windows文件夹
216
     
)
217
if
exist c:
test
.bat (
218
     
echo

存在c:
test
.bat
219
     
)

else
(
220
     
echo

不存在c:
test
.bat
221
     
)
222
 
223
30 setlocal 和endlocal
224
设置”命令扩展名”和”延缓环境变量扩充”
225
SETLOCAL ENABLEEXTENSIONS            
#启用"命令扩展名"
226
SETLOCAL DISABLEEXTENSIONS           
#停用"命令扩展名"
227
SETLOCAL ENABLEDELAYEDEXPANSION      
#启用"延缓环境变量扩充"
228
SETLOCAL DISABLEDELAYEDEXPANSION     
#停用"延缓环境变量扩充"
229
ENDLOCAL                             
#恢复到使用SETLOCAL语句以前的状态
230
“命令扩展名”默认为启用
231
“延缓环境变量扩充”默认为停用
232
批处理结束系统会自动恢复默认值
233
可以修改注册表以禁用
"命令扩展名"
,详见 cmd /? 。所以用到
"命令扩展名"
的程
234
序,建议在开头和结尾加上 SETLOCAL ENABLEEXTENSIONS 和ENDLOCAL 语句,以确
235
保程序能在其它系统上正确运行
236
"延缓环境变量扩充"
主要用于
if
for

的符合语句,在
set
的说明里有其实用例程
237
 
238
31
set
239
设置变量
240
引用变量可在变量名前后加 % ,即 %变量名%
241
set
                    
#显示目前所有可用的变量,包括系统变量和自定义的变量
242
echo
%SystemDrive%     
#显示系统盘盘符。系统变量可以直接引用
243
set
p                  
#显示所有以p开头的变量,要是一个也没有就设errorlevel=1
244
set
p=aa1bb1aa2bb2     
#设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
245
echo
%p%               
#显示变量p代表的字符串,即aa1bb1aa2bb2
246
echo
%p:~6%            
#显示变量p中第6个字符以后的所有字符,即aa2bb2
247
echo
%p:~6,3%          
#显示第6个字符以后的3个字符,即aa2
248
echo
%p:~0,3%          
#显示前3个字符,即aa1
249
echo
%p:~-2%           
#显示最后面的2个字符,即b2
250
echo
%p:~0,-2%         
#显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
251
echo
%p:aa=c%          
#用c替换变量p中所有的aa,即显示c1bb1c2bb2
252
echo
%p:aa=%           
#将变量p中的所有aa字符串置换为空,即显示1bb12bb2
253
echo
%p:*bb=c%         
#第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
254
set
p=%p:*bb=c%        
#设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
255
set
/a p=39            
#设置p为数值型变量,值为39
256
set
/a p=39/10         
#支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
257
set
/a p=p/10          
#用 /a 参数时,在 = 后面的变量可以不加%直接引用
258
set
/a p=”1&0″         
#”与”运算,要加引号。其它支持的运算符参见set/?
259
set
p=                 
#取消p变量
260
set
/p p=请输入
261
屏幕上显示”请输入”,并会将输入的字符串赋值给变量p
262
注意这条可以用来取代 choice 命令
263
注意变量在
if

for
的复合语句里是一次性全部替换的,如
264
@
echo

off
265
set
p=aaa
266
if
%p%==aaa (
267
     
echo

%p%
268
     
set

p=bbb
269
     
echo

%p%
270
     
)
271
结果将显示
272
aaa
273
aaa
274
因为在读取
if

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

off
278
SETLOCAL ENABLEDELAYEDEXPANSION
279
set
p=aaa
280
if
%p%==aaa (
281
     
echo

%p%
282
     
set

p=bbb
283
     
echo

!p!
284
     
)
285
ENDLOCAL
286
结果将显示
287
aaa
288
bbb
289
还有几个动态变量,运行
set

看不到
290
%CD%                  
#代表当前目录的字符串
291
%DATE%                
#当前日期
292
%TIME%                
#当前时间
293
%RANDOM%              
#随机整数,介于0~32767
294
%ERRORLEVEL%          
#当前 ERRORLEVEL 值
295
%CMDEXTVERSION%       
#当前命令处理器扩展名版本号
296
%CMDCMDLINE%          
#调用命令处理器的原始命令行
297
可以用
echo
命令查看每个变量值,如
echo
%
time
%
298
注意 %
time
% 精确到毫秒,在批处理需要延时处理时可以用到
299
 
300
32 start
301
批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令
302
 
303
33call
304
批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行
305
有时有的应用程序用start调用出错的,也可以call调用
306
 
307
34choice (外部命令)
308
选择命令
309
让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为1234……
310
win98里是choice.com
311
win2000pro里没有,可以从win98里拷过来
312
win2003里是choice.exe
313
choice /N /C y /T 5 /D y>nul
314
延时5秒
315
 
316
35 assoc 和ftype
317
文件关联
318
assoc 设置
'文件扩展名'
关联,关联到
'文件类型'
319
ftype 设置
'文件类型'
关联,关联到
'执行程序和参数'
320
当你双击一个.txt文件时,windows并不是根据.txt直接判断用 notepad.exe 打开
321
而是先判断.txt属于 txtfile
'文件类型'
322
再调用 txtfile 关联的命令行 txtfile=%SystemRoot%system32NOTEPAD.EXE %1
323
可以在
"文件夹选项"
"文件类型"
里修改这2种关联
324
assoc           
#显示所有'文件扩展名'关联
325
assoc .txt      
#显示.txt代表的'文件类型',结果显示 .txt=txtfile
326
assoc .doc      
#显示.doc代表的'文件类型',结果显示 .doc=Word.Document.8
327
assoc .exe      
#显示.exe代表的'文件类型',结果显示 .exe=exefile
328
ftype           
#显示所有'文件类型'关联
329
ftype exefile   
#显示exefile类型关联的命令行,结果显示 exefile="%1" %*
330
assoc .txt=Word.Document.8
331
设置.txt为word类型的文档,可以看到.txt文件的图标都变了
332
assoc .txt=txtfile
333
恢复.txt的正确关联
334
ftype exefile=
"%1"

%*
335
恢复 exefile 的正确关联
336
如果该关联已经被破坏,可以运行
command
.com ,再输入这条命令
337
 
338
36
pushd

popd
339
切换当前目录
340
@
echo

off
341
c: &
cd

& md mp3       
#在 C: 建立 mp3文件夹
342
md d:mp4               
#在 D: 建立 mp4文件夹
343
cd
/d d:mp4            
#更改当前目录为 d:mp4
344
pushd
c:mp3             
#保存当前目录,并切换当前目录为 c:mp3
345
popd
                    
#恢复当前目录为刚才保存的 d:mp4
346
 
347
37
for
348
循环命令
349
这个比较复杂,请对照
for
/? 来看
350
for
%%i
in
(c: d: e: f:)
do
echo

%%i
351
依次调用小括号里的每个字符串,执行
do

后面的命令
352
注意%%i,在批处理中
for

语句调用参数用2个%
353
默认的字符串分隔符是
"空格键"
"Tab键"
"回车键"
354
for
%%i
in
(*.txt)

do
find
"abc"
%%i
355
对当前目录里所有的txt文件执行
find

命令
356
for
/r . %%i
in
(*.txt)
do
find

"abc"
%%i
357
在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行
358
for
/r . %%i
in
(.)
do
echo

%%~pni
359
显示当前目录名和所有子目录名,包括路径,不包括盘符
360
for

/r d:mp3%%i
in

(*.mp3)
do
echo
%%i>>d:mp3.txt
361
把 d:mp3及其子目录里的mp3文件的文件名都存到 d:mp3.txt 里去
362
for
/l %%i
in
(2,1,8)
do
echo

%%i
363
生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1
364
for
/f %%i
in
(
'set'
)
do
echo

%%i
365
set

命令的输出结果循环调用,每行一个
366
for
/f
"eol=P"
%%i

in
(
'set'
)
do
echo

%%i
367
set

命令的输出结果,忽略以 P 开头的那几行
368
for
/f %%i
in
(d:mp3.txt)
do
echo

%%i
369
显示 d:mp3.txt 里的每个文件名,每行一个,不支持带空格的名称
370
for
/f
"delims="
%%i
in
(d:mp3.txt)

do
echo
%%i
371
显示 d:mp3.txt 里的每个文件名,每行一个,支持带空格的名称
372
for
/f
"skip=5 tokens=4"
%%a
in
(
'dir'
)
do
echo

%%a
373
dir

命令的结果,跳过前面5行,余下的每行取第4列
374
每列之间的分隔符为默认的
"空格"
375
可以注意到
dir

命令输出的前5行是没有文件名的
376
for
/f
"tokens=1,2,3delims=- "
%%a
in
(
'date /t'
)
do
(
377
     
echo

%%a
378
     
echo

%%b
379
     
echo

%%c
380
     
)
381
date

/t 的输出结果,每行取1、2、3列
382
第一列对应指定的 %%a ,后面的 %%b 和%%c 是派生出来的,对应其它列
383
分隔符指定为 - 和
"空格"
,注意 delims=- 后面有个
"空格"
384
其中 tokens=1,2,3若用 tokens=1-3替换,效果是一样的
385
for
/f
"tokens=2* delims=- "
%%a
in
(
'date /t'
)
do
echo

%%b
386
取第2列给 %%a ,其后的列都给 %%b
387
 
388
38 subst (外部命令)
389
映射磁盘。
390
subst z: serverd     
#这样输入z:就可以访问serverd了
391
subst z: /d             
#取消该映射
392
subst                   
#显示目前所有的映时
393
 
394
39   xcopy(外部命令)
395
文件拷贝
396
xcopyd:mp3e:mp3/s/e/i/y
397
复制 d:mp3文件夹、所有子文件夹和文件到 e: ,覆盖已有文件
398
加 /i 表示如果 e: 没有 mp3文件夹就自动新建一个,否则会有询问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows batch