批处理命令
Cd
切换文件夹
cd.>d:\test.txt 创建空文件
dxdiag
查看机器配置
del
Del /q d:\*.bak
rem 删除D盘下全部bak类型的文件,包含子文件夹。
del /q 文件名称
rem 不询问直接删除
rem 多个文件以逗号分开
rmdir
rmdir /s /q 文件夹名
rem 删除文件夹下全部文件及文件夹
/s 除文件夹本身外,还将删除指定文件夹下的全部子文件夹和文件。
cmd
rem 最后加上cmd。能让命令界面显示出来,运行完后不马上消失
cmd /k echo. 退出回车,放在命令之后。能够实现运行到此步后停止
pause
rem 暂停
pause >nul 不显示“请按随意键继续.. .”
echo
echo 文字
rem 命令行界面输出文字内容
echo off
rem 不显示命令行。仅仅显示运行结果,假设是@echo off表示echo off本身都不显示
echo f| xcopy /q /y d:\asar\make.bat d:\123\12\12\make.bat/f
原本此xcopy会提示是文件夹还是文件。须要手工输入/f,使用echo就默认输入/F
/f表示文件 /d表示目录
set
rem 定义变量
set /a AA=1+2 /a表示等号右边为计算,会将计算结果赋值给AA
set AA=1+2 变量AA显示就1+2
set /p AA= 能够输入设置变量AA的值
ren
ren d:\abc\aBZ.txt abz.txt
或者cd到相应文件夹
ren aBZ.txt abz.txt
Copy
copy /y C:\c\*jc* D:\d\c\
拷贝C:\c\带jc字样的文件到D:\d\c\文件夹下,D:\d\c\必须存在,否则会报错。
所以目标文件夹必须存在。
grep -n ORA- alert_sid.log
rem 显示alert_sid.log中ORA-的行
xcopy
xcopy /e /y /q 文件夹A 文件夹B
/e 表示复制文件夹与子文件夹,包含空文件夹。
/y 表示不提示。
/q 表示复制时不显示文件名称
rem 复制文件夹A下的文件及文件夹到B文件夹下。假设B文件夹不存在会自己主动创建。
假设想连同A文件夹也拷贝,那么命令如:
xcopy /e /y /q 文件夹A 文件夹B\文件夹A
所以此命令仅是文件夹下文件及文件夹的拷贝,根文件夹若须要拷贝,还须要手工写。
xcopy C:\c D:\d\c\ 拷贝C盘c文件夹下的文件到D:\d\c\文件夹下
注意:
1. C:\c后面不能有斜杠,否则无法复制
2. Xcopy /y /q /e C:\c\*jc*D:\d\c\ 拷贝C:\c\带jc字样的文件,假设目录下有目录。会发现D:\d\c\会出现空目录,这时须要将/e參数去掉。
xcopy/y /q /e d:\ccc c:\ccc\
參数介绍
source 指定要复制的文件。
destination 指定新文件的位置和/或名称。
/A 仅仅复制有存档属性集的文件,但不改变属性。
/M 仅仅复制有存档属性集的文件,并关闭存档属性。
/D:m-d-y 复制在指定日期或指定日期以后改变的文件。假设没有提供日期。仅仅复制那些源时间比目标时间新的文件。
/EXCLUDE:file1[+file2][+file3]...
指定含有字符串的文件列表。
假设有不论什么字符串与要被复制的文件的绝对路径相符,那个文件将不会得到复制。
比如,指定如 \obj\ 或 .obj 的字符串会排除文件夹 obj 以下的全部文件或带有 .obj 扩展名的文件。
/P 创建每一个目标文件前提示。
/S 拷贝文件夹和子文件夹,除了空的。
/E 拷贝文件夹和子文件夹。包含空的。
与 /S /E 同样。能够用来改动 /T。
/V 验证每一个新文件。
/W 提示您在复制前按键。
/C 即使有错误,也继续复制。
/I 假设目标不存在。又在复制一个以上的文件,则假定目标一定是一个文件夹。
/Q 复制时不显示文件名称。
/F 复制时显示完整的源和目标文件名称。
/L 显示要复制的文件。
/G 同意将没有经过加密的文件拷贝到不支持加密的目标。
/H 也复制隐藏和系统文件。
/R 改写仅仅读文件。
/T 创建文件夹结构。但不拷贝文件。不包含空文件夹或子文件夹。
/T /E 包含空文件夹和子文件夹。
/U 仅仅复制已经存在于目标中的文件。
/K 复制属性。
一般的 Xcopy 会重设仅仅读属性。
/N 用生成的短名复制。
/O 拷贝文件全部权和 ACL 信息。
/X 拷贝文件审核设置(隐含 /O)。
/Y 禁止提示以确认改写一个现存目标文件。
/-Y 导致提示以确认改写一个现存目标文件。
/Z 用又一次启动模式复制网络文件。
>
>1.log
rem 把内容输出到1.log文件里,经常使用在日志输出中。会替换同名文件,所以使用时要特别注意,假设是运行不同文件想生成不同该文件,那么须要用变量命名日志文件。
>>1.log
rem 和>差别在于,此符号能够在同名文件里追加。
rem 检查错误日志
type %LogDir%\%sqlLogFile%|find "ORA-"
if "%errorlevel%" equ "0" (
echo 【错误】脚本升级失败,错误信息例如以下:>>%MainLog%
type %LogDir%\%sqlLogFile%|find "ORA-" >>%MainLog%
rem exit 1
)
这是区分大写和小写的。
Dirc:\>null 2>null 表示显示c盘文件夹时,不管正确或者错误的结果都不显示。
echoaa >log.txt 2>&1 表示输出所有日志,包含正确和错误的信息。
For循环
rem for循环
for %%i in (*.sql) do callCREATE_ALL_File.bat %%i
当前文件夹全部sql根据运行bat命令,后面的%%i 即是传入的參数。在CREATE_ALL_File.bat中即作为%1变量
%%~xni 表示取文件名称,包含扩展名
%%~dpi 表示取路径
%%~I 表示去除引號
參数介绍:
/d /r /l /f
Ø /d 表示 仅为文件夹
主要用于搜索文件夹
For /d %%i in (*) do @echo %%i 显示当前文件夹全部文件夹名称。文件不显示
For /d %%i in (D:\*) do @echo %%i 显示d盘下全部文件夹名。D:\TEST\写在/d后面是不对的。要写在括号中面。
Ø /r 表示递归。显示文件夹中包含子文件夹的文件
for /r d:\test %%i in (*) do @echo %%i 显示d:\test下全部文件,*用来搜索文件
for /r d:\src %%a in (.) do if exist%%a\.svn rd /s/q %%a\.svn 删除d:\src文件夹下.svn。“.”用来搜索文件夹
注意:如d:\test这样路径。能够使用变量,可是不能使用for循环的变量%%i。包含set dd=%%i,dd这种变量也不行。
for %%a in(modifypath.txt,addpath.txt,deletepath.txt) do (
if exist %Logdir%\%%a (
for /f"tokens=* delims=" %%i in (%Logdir%\%%a) do (
set sln=%%i
set sln1=%%i
set sln=!sln:\work\IFSrc=!
if "!sln!" NEQ "%%i" (
for /r !sln1! %%b in (*.sln) do (
cd /d %%~dpb
%VSpath%%%~xnb /rebuild "Release|Win32" /out %LogDir%\Client_%%~nb.log
)
)
)
)
)
Ø /l 表示迭代
For /l %%i in (1,1,5) do @echo %%i 显示1到5。括号内表示起始数字1,终止数字5。间隔1,还能够使用-1。
Ø /f
for /f "tokens= * delims= " %%iin (d:\test\112.txt) do @echo %%i
显示112.txt的文件内容。
For /f 会把文件里每一行做为一个元素输出。然后使用tokens和delims參数截取元素。Delims表示分隔符,tokens表示取几个元素。
for/f " delims= " %%i in (d:\test\112.txt) do @echo %%i
显示全部内容
for/f "tokens=* delims= " %%i in (d:\test\112.txt) do @echo %%i
tokens=*表示显示剩余内容。除了把第一列显示出来,还把剩余的都显示出来,那么就是显示所有。
"tokens=* delims="以一行为单位。依次显示所有行。
for/f " tokens=2,* delims= " %%i in (d:\test\112.txt) do @echo %%i %%j
显示第二列内容和后面剩余的内容,后面的%%j必须包括并且是i后的字母
12 13
22 23
32 33
for/f " skip=2 delims= " %%i in (d:\test\112.txt) do @echo %%i
skip表示跳过前两行
for/f " eol=. delims= " %%i in (d:\test\112.txt) do @echo %%i
eol表示跳过以”.”开头的行
for/f " tokens=* delims= " %%i in (d:\test\112.txt, d:\test\222.txt) do@echo %%i
多个文件。用逗号隔开
Find
type D:\test\11.txt|find "error"
在11.txt查找error,存在则输出。
仅仅能查找单个keyword
区分大写和小写
/i 表示不区分大写和小写
Find “abc”D:\test\11.txt 查找文件里是否含有abc,引號绝对不能少。
Findstr
type D:\test\11.txt|findstr "errorError"
能够查找多个keyword
区分大写和小写
Start
在还有一窗体运行,能够变相实现并行同意。
IF推断变量值是否等于
If %test% ==true (
)
用两个等于号
EQU -
等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
等待
ping 127.1 /n 20 >nul
等待20秒
注意:>nul表示输入空设备。假设写成>null,那么就会生成null文件
截取字符
setstr=123456789
echo 第一个字符为:%str:~0,1%
echo 头两个字符为:%str:~0,2%
echo 头5个字符为:%str:~0,5%
echo 去掉最后一个字符后的字符串为:%str:~0,-1%
echo 去掉最后3个字符后的字符串为:%str:~0,-3%
echo 第4个字符为:%str:~3,1%
echo 第4个及其之后的3个字符为:%str:~3,4%
echo 最后一个字符为:%str:~-1%
echo 最后一个字符为:%str:~-1,1%
echo 最后一个字符为:%str:~-1,2%
echo 倒数第4个字符为:%str:~-4,1%
echo 倒数第4个及其之后的字符为:%str:~-4%
echo 倒数第4个及其之后的1个字符为:%str:~-4,2%
echo 倒数第4个及其之后的2个字符为:%str:~-4,3%
替换字符
%A:中国=中华人民共和国%
将A字符中的“中国”替换成“中华人民共和国”
注意:
不能使用两对百分号进行替换,如setbb=%bb:%aa%=234%,可是能够使用变量延迟来实现变量中用变量替换,如set bb=!bb:%aa%=234!
变量延迟
setlocal EnableDelayedExpansion
变量用两个!括起来
假设已经定义的变量,在if、for语句中会被又一次set,须要用变量延迟,否则变量会一直是之前设置的变量值。
Set aa=11
If %aa%=11 (
Setaa=22
Echo%aa%
)
结果仍然是aa=11,改为
Set aa=11
If !aa!=11 (
Setaa=22
Echo!aa!
)
for /r d:\o4client %%i in (Hundsun.*.dll)do set JMdll=!JMdll!/%%i
&、&&、||、|
& 顺序运行多条命令,而无论命令是否运行成功
例:copy nul 5.txt & echo 666 >>5.txt & more 5.txt
创建5.txt文档,向5.txt文档中写入内容“666”,输出5.txt的内容。
&& 顺序运行多条命令。当碰到运行出错的命令后将不运行后面的命令
|| 顺序运行多条命令,当碰到运行正确的命令后将不运行后面的命令
| 管道命令 前一个命令的运行结果输出到后一个命令
转义字符^
将命令字符,转义成普通字符,比方%、>、<等。
加多少个转义字符,须要注意:
当直接使用转义字符时。加一个就可以。
如:
If %errorlevel% equ 0(xcopy /q /y /ed:\20141212.12^(RC_20141205^) d:\o3\20141212.12^(RC_20141205^))
当间接使用转义字符时,须要考虑在定义变量时,会损耗转义字符。如:执行到第二行时,必须保证有3个转义字符。才干保证在以下的IF语句中转义被使用。
set PackName1=%PackName:(=^^^^^(%
setPackName1=%PackName1:)=^^^)%
if exist %SQLPath%\*.sql (
move /y %SQLPath%\*.sql%TarDir%\%PackName1%\脚本
)
当for循环中变量中带有“(”,“)”,无需字符转义,而外部变量就须要使用。例如以下面样例。PackName1须要转移,而ff路径中即使带括号也无需转移
setPackName1=%PackName:(=^^^^^(%
setPackName1=%PackName1:)=^^^)%
for /f"tokens=* delims=" %%i in (E:\modify_dll.txt) do (
set ee=%%i
set ff=%%~dpi
echo f|xcopy /q /y !ee! %TarDir%\%PackName1%\!ff:E:\Run\=!/f
)
Call
Call :sub %aa%
调用sub函数,传入变量%aa%。
在sub中用%1来表示变量2,%2表示变量2。此样例中仅仅有一个变量,所以仅仅有%1。
%1和%~1,差别在于%~1会去除引號。
Move
Move表示移动文件或者文件夹,能够用作剪切。
Move /y c:\A c:\b A、B表示文件
将A文件重命名为B,不提示。不会拷贝子文件夹文件。
Move /y c:\123\A C:\345
将A文件前剪切到345文件夹
%errorlevel%
表示记录命令运行正确与否的变量。
Type d:\12.txt|find “abc”
假设找到那么%errorlevel%值为0,找不到置为1.找到说明没有错误。找不到说明有错误。
当在for、if根据中引用此变量时,须要循环内使用setlocal EnableDelayedExpansion
如:
for /l%%a in (2,1,254) do (
SETLOCALENABLEDELAYEDEXPANSION
ping 192.168.0.%%a -n 2
if !ERRORLEVEL! == 0 (
echo IP:192.168.0.%%a已经成功联网>> d:netreport.txt
start d:netreport.txt
exit
)
ENDLOCAL
)
SVN
忽略目录,不能少了“.”
Cd /d 工作文件夹
svn propsetsvn:ignore "output" .
svn ci -m"Ignoring a directory called '123','output' ."
假设须要忽略多个目录,那么使用:svn propset svn:ignore -F 123.txt .
读取文件来设置
获取SVN日志:
svn.exelog %Srcdir%\Run\bin --revision {"2014-12-2511:25:00"}:{"2014-12-25 15:00:00"} --username hs\o4cm --passwordtrade32@wu -q --verbose --trust-server-cert--non-interactive>>e:\svnlog_DLL.txt
导出的是全部包括RUN\bin的递交记录,所以会发现日志中还会有其它的路径,仅仅要单次递交中包括了RUN\bin。就会显示出来。也相同显示其它路径
Delphi dcc命令行编译
Cd 相应dpr文件夹
dcc32 -Q -B -U%DelphiLibrary%-N%DelphiOutputpath% xx.dpr >Client_%%~na.log
Delphi IDE命令行编译
Cd 相应dpr文件夹
"c:\delphi\BIN\delphi32.exe" -B -ns-o"%LogDir%\Client.log" xx.dpr
DOS下扩展分区
首先确认分区类型为NTFS
输入例如以下命令:
Diskpart 进入磁盘管理控制台
List disk 显示全部磁盘
Select disk 0 选择磁盘
List partition 显示全部分区
Select partition 1 选择分区
List volume 显示全部卷
Select volume 选择要扩容的卷
Extend 自己主动扩容卷(须要有未分配的空间)
删除Win服务
Sc delete “服务名称”
服务名称须要右键点击属性查看
变量迭代使用
set aa=d:\1\2
set bb=d:\1
set cc=%aa:%bb%=%
echo %cc%
运行即报错,由于替换时,两个变量不能迭取代换。
使用call就能够实现了。
set aa=d:\1\2
set bb=d:\1
call setcc=%%aa:%bb%=%%
echo %cc%