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,存在则输出。只能查找单个关键字
区分大小写
/i 表示不区分大小写
Find “abc”D:\test\11.txt 查找文件中是否含有abc,引号绝对不能少。
Findstr
type D:\test\11.txt|findstr "errorError"
可以查找多个关键字
区分大小写
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%