批处理命令

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=%%idd这样的变量也不行。

                       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%

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值