使用批处理文件
echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。电+脑*维+修-知.识_网(w_ww*dnw_xzs*co_m)
echo
表示显示此命令后的字符
echo off
表示在此语句后所有运行的命令都不显示命令行本身
@
与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。
call
调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)
pause
运行此句会暂停,显示Press any key to continue... 等待用户按任意键后继续
rem
表示此命令后的字符为解释行,不执行,只是给自己今后查找用的
一,定义一个时间标题的命令窗口
@echo off
:1
title 时间 is :%time%
goto 1
pause
二,判断两个输入字符是否相等
@echo off
set /p var=请输入第一个字符:
set /p var2=请输入第二个字符:
if "%var%" == "%var2%" (echo 我们相等) else echo 我们不相等
pause
三,显示当前文件夹所有的文件清单
@echo off
dir /b /on >list.txt
pause
四,显示当前文件夹所有的文件(包括文件)的所有文件的路径
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do (
set file=%%~fi
set file=!file:/=/!
echo !file! >> 路径.txt
)
pause
其中& setlocal EnableDelayedExpansion必不可少
五,显示当前文件夹下及子文件夹下所有的java文件的路径
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('"dir /a/s/b/on *.java"') do (
set file=%%~fi
set file=!file:/=/!
echo !file! >> 路径.txt
)
pause
其中& setlocal EnableDelayedExpansion必不可少
六,删除文件 del 是用来删除文件的,删除文件夹的命令是rd
@echo off
del ddd.txt
pause
七,删除文件夹
@echo off
rd ddd
pause
八,判断是否存在文件,若存在则显示文件内容
@echo off
if exist sources.list type sources.list
pause
九,使用批处理按要求批量删除文件夹方法汇总
示例一:
有这样一大堆文件夹结构,例如
abcde
|-----abcd2000
|---------0003
|----------0004
........
|------abcd2001
|---------0006
|----------0002
........
|------abcd2002
|---------0005
|----------0002
........
cdefe
|-----cdefe2000
|---------0003
|----------0004
........
|------cdefe2001
|---------0006
|----------0002
........
|------cdefe2002
|---------0005
|----------0002
........
现在想把第二层目录里按照年代删除,比如只删除abcd2000,abcd2001,cdefe2000,cdefe2001这样的包含2000,2001字段目录以及它下层目录,该怎么做呢
1 2 3 4 5 6 7 8 9 | @ echo off setlocal enabledelayedexpansion ::设置一级文件夹 set folder=D:\abcde for /f "delims=" %%a in ( 'dir /ad /b %folder%' ) do ( set str=%%a if "!str:~-4!" == "2000" rd %folder%\!str! /s /q if "!str:~-4!" == "2001" rd %folder%\!str! /s /q ) |
示例二:
我的所有图片都保存在F:\Photography ,而下面还有N多文件夹,这些文件夹中都有一个叫“.picasaoriginals”的文件。。。注意,这个名字前有一个点!!!
例如 F:\Photography\我@\我@青岛\.picasaoriginals
现在我们需要用一个批处理删除所有F:\Photography子文件夹中,含有.picasaoriginals这个文件夹的。。。
还有,为保险起见。。。请在程序中提示是否要删除这些信息。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | @ echo off echo 正在扫描文件。。。 for /f "delims=" %%a in ( 'dir /a-d /s /b .picasaoriginals' ) do ( if /i "%%~nxa" == ".picasaoriginals" ( if exist "%%~a" ( echo del /f /q "%%~a" >>DelNow.bat ) ) ) if exist "DelNow.bat" ( ping 0 -n "2" >nul call:qd ) del /f /q DelNow.bat exit :qd cls set /p q=确认删除吗?(输入Y确定,其它退出): cls if /i "%q%" == "Y" ( echo 正在删除中。。。 ping 0 -n "2" >nul call DelNow.bat cls echo 删除完成! ping 0 -n "2" >nul ) goto :eof |
示例三:
批量删除电脑中所有带qqq的文件和文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @ echo off echo ....文件查找,请等待... c:\ for /r c: %%a in (.) do @ if exist %%a\qqq.* del %%a\qqq.* for /r c: %%a in (.) do @ if exist %%a\qqq rd /s /q %%a\qqq d:\ for /r d: %%a in (.) do @ if exist %%a\qqq.* del %%a\qqq.* for /r d: %%a in (.) do @ if exist %%a\qqq rd /s /q %%a\qqq e:\ for /r e: %%a in (.) do @ if exist %%a\qqq.* del %%a\qqq.* for /r e: %%a in (.) do @ if exist %%a\qqq rd /s /q %%a\qqq f:\ for /r f: %%a in (.) do @ if exist %%a\qqq.* del %%a\qqq.* for /r f: %%a in (.) do @ if exist %%a\qqq rd /s /q %%a\qqq goto end :end echo good bye! |
十,删除指定文件夹里所有的的文件,文件夹
@echo off
for /d %%i in (E:\jenkinsTest\destination\Practice\*) do @rmdir /s /q "%%i"
pause
说明:E:\jenkinsTest\destination\Practice 是要删除的文件夹,@ 连续执行FOR的第一个结果。%i 是变量参数,表示第几个文件或者目录。在批处理文件中(BAT文件)用的是%%i,直接在DOS下面都用%i。/q 是自动应答,对所有的问题作Yes处理。
十一,删除不为空的文件夹
rmdir /s /q E:\jenkinsTest\destination\Practice
十二,if exist else用法
if exist E:\jenkinsTest\destination\Practice (echo cunzai ) else (echo bucunzai)
十三,复制
copy,中文含义为“复制”,一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件 目的路径。
假设,你需要把d:\test\test.txt这个文件复制到D盘根目录下,那么,使用 copy d:\test\test.txt d:\ 就可以轻易办到。
当然,这是最简单的情形,在实际使用中,还是会碰到十分复杂的情况的。
如果D盘根目录下已经存在了一个名为test.txt的文件,那么,复制过去的时候,copy命令就会提示你是覆盖原文件、是放弃复制还是覆盖所有文件。如果你在批量复制的时候,一概覆盖原文件,那么,一个一个地选择十分麻烦,这个时候,你可以使用不加提示就覆盖原文件的参数 /y (相当于自动选择了Yes选项),完整的命令为 copy /y d:\test\test.txt d:\ 。
如果复制的时候,你还需要把源文件改个名,比如把test.txt改为1.txt的时候,可以直接使用:copy d:\test\test.txt d:\1.txt 这样的命令,也就是说,在指定目的路径的时候,直接指定文件名,那么,新的文件名就是源文件复制之后的名字。
如果要复制的路径带有空格、&等特殊符号的时候,请使用引号把这些特殊字符括起来,比如: copy "d:\test abc\test.txt" "d:\t&est"
copy命令除了“复制”文件的功能外,还有一个绝活:合并多个文件为一个文件,具体的格式为:copy 文件1+文件2+文件3+…… 目的路径\新文件名 。例如:copy d:\test.txt+d:\abc.txt d:\test\test.txt,那么,就把D盘根目录下的test.txt和abc.txt两个文件的内容合并为test.txt,并保存到d:\test目录下。
copy 还有一些参数,但是常用的就上面的用法,更多的用法请在命令行窗口中使用 copy /? 来查询,很容易上手的。
必须注意的是,copy只能复制文件,对于文件夹的复制,则需要另请高明,动用xcopy来复制。xcopy是copy的高级版本,有更丰富的参数,能实现更加复杂的功能,通吃文件和文件夹的复制,以后将另行介绍,在这里就不展开讲解了。
六,编译java文件
1)
@echo off
cd E:\jenkinsTest
javac -d E:\jenkinsTest\zcd\classZcd TestJavac.java
cd E:\jenkinsTest\zcd\classZcd
java coms.zcd.action.TestJavac
mkdir Practice2
IF %ERRORLEVEL%==0 ECHO success
IF %ERRORLEVEL%==1 ECHO fail
:end
pause
=========
2)
@echo off
cd E:\jenkinsTest
javac -d .\zcd\classZcd TestJavac.java
cd E:\jenkinsTest\zcd\classZcd
java coms.zcd.action.TestJavac
mkdir Practice2
IF %ERRORLEVEL%==0 ECHO success
IF %ERRORLEVEL%==1 ECHO fail
:end
pause
===========
3)
@echo off
cd E:\jenkinsTest
javac -d .\zcd\classZcd TestJavac.java
cd .\zcd\classZcd
java coms.zcd.action.TestJavac
mkdir Practice2
IF %ERRORLEVEL%==0 ECHO success
IF %ERRORLEVEL%==1 ECHO fail
:end
pause
===================================
4)
@echo off
cd E:\jenkinsTest
javac -d .\zcd\classZcd -classpath lib -Djava.ext.dirs=E:\jenkinsTest\lib TestJavac.java
cd .\zcd\classZcd
java coms.zcd.action.TestJavac
mkdir Practice2
IF %ERRORLEVEL%==0 ECHO success
IF %ERRORLEVEL%==1 ECHO fail
:end
pause
其中javac -d .\zcd\classZcd -classpath lib -Djava.ext.dirs=E:\jenkinsTest\lib TestJavac.java表示编译TestJavac.java文件,并把产生的class文件放入当前目录的子目录classZcd目录下,并以java文件里的包名创建对应的文件夹,-classpath lib -Djava.ext.dirs=E:\jenkinsTest\lib 表示TestJavac.java依赖E:\jenkinsTest\lib 下面的包
==============================
5)编译当前目录下子目录src里所有的java文件
@echo off
cd E:\jenkinsTest
javac -d .\zcd\classZcd -classpath lib -Djava.ext.dirs=E:\jenkinsTest\lib .\src\*.java
cd .\zcd\classZcd
java coms.zcd.action.TestJavac
mkdir Practice2
IF %ERRORLEVEL%==0 ECHO success
IF %ERRORLEVEL%==1 ECHO fail
:end
pause