来自 操作系统 2019-12-04 16:28 的文章
当前位置: 澳门威尼斯人平台 > 操作系统 > 正文

批处理/DOS命令删除文件夹下某类型的文件

用过gothub或者码云的同学都知道,不包含任何文件的空文件夹上传提交时不被允许的。当然你可以在空文件下创建.keep文件(或.gitkeep文件),然后就可以上传了。

实现代码:

  • ### 批处理符号简介

del /S /F /Q *.aspx.cs
del /S /F /Q *.aspx.resx
del /S /F /Q *.ascx.cs

但是如果空文件夹比较多,并且我们确实不需要这些空文件了,那本文就学习一种命令行删除所有空文件夹的方法。并封装成.bat批处理程序。通过鼠标右键运行即可。

复制代码 代码如下:

回显屏蔽 @

一,DOS删除命令

@echo off
for /f "tokens=*" %%a in ('dir /b /ad /s "目标文件夹"^|sort /r') do rd "%%a" 2>nul
pause
goto :eof
@echo off
for /f "delims=" %%i in ('dir /ad /b /s') do call :rd_dir_empty "%%i"
goto :eof

表示不显示@后面的命令
@用法举例:通过运行批处理文件对比pause和@pause命令即可明了@的效果。

  1.1,删除文件命令 del

若是想删除文件,输入del 盘符名:文件名,比如,我想删除一个在F盘的名为123.txt的文件,则输入  del f:123.txt  按回车就能删除该文件了。当然,该命令只能删除文件,不能删除文件夹。若要用该命令删除一个文件夹,会显示找不到文件123.txt。

rem ======= 删除空目录 =========
:rd_dir_empty
rd %1 2>nul||goto :eof
set dir_route=%1
for /f "delims=" %%i in (%dir_route%) do (
澳门威尼斯人注册网站,set dir_route="%%~dpi"
for /f "delims=" %%j in ('dir /ad /b "%%~dpi"')do rd "%%~dpi%%j" 2>nul||goto :eof
)
:: 把路径最后的去掉,以便set route_deepest="%%~dpi"能取到上一层路径
if "%dir_route:~-2,1%"=="" set dir_route="%dir_route:~1,-2%"
if /i not "%cd%"==%dir_route% call :rd_dir_empty %dir_route%
goto :eof

重定向1 >与>>

  1.2,删除文件夹命令 rm

若是想删除文件夹,输入rd 盘符名:文件夹名称,比如,我想删除一个在D盘的名为wo的文件夹,则输入  rd d:wo  这样就能删除文件夹了。当然这种删除方法必须要该文件夹是空文件夹,不然删除不了。

第一步:进入Windows的MS-DOS窗口(Windows 2000/XP叫命令行提示符),进入要查找空文件夹的驱动器,执行: 
  dir /ad/b/s | sort /r >empties.bat。 
  小提示    

将输出信息重定向到指定的设备或文件。系统默认输出到显示器。
>清除文件中原有的内容后再写入
>>追加内容到文件末尾,而不会清除原有的内容主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件
====================================================
echo hello world>c:/test.txt   生成c:/test.txt文件,内容为hello world这个格式在批处理文件里用得很多,可以生成.reg .bat .vbs 等临时文件
type c:/test.txt >prn          屏幕上不显示文件内容,转向输出到打印机
echo hello world>con           在屏幕上显示hello world,实际上所有输出都是默认 >con 的
copy c:/test.txt f: >nul       拷贝文件,并且不显示"文件复制成功"的提示信息,但如果f盘不存在,还是会显示出错信息
copy c:/test.txt f: >nul 2>nul 不显示"文件复制成功"的提示信息,并且f盘不存在的话,也不显示错误提示信息
echo ^^W ^> ^W>c:/test.txt     生成的文件内容为 ^W > W^ 和 > 是控制命令,要把它们输出到文件,必须在前面加个 ^符号
================================================

  1.3,文件夹和文件一起删除

若是想将文件夹和文件一起删除,输入rd /s /q 盘符名:文件夹名,这样会将文件夹和它里面的文件一起删除。比如,我想删除一个在F盘的名为wo的文件夹和它里面的名为123.txt的文件,输入:  rd /s /q f:wo  即可。

注意:删除文件之前备份,不要将有用文件删除!

 

复制代码 代码如下:

重定向2 <

实例一: 批量(循环)删除指定目录下所有空文件夹

下面的代码实现功能是批量删除F:盘下的所有空文件夹:

@echo off
for /f "delims=" %%a in ('dir /ad /b /s F:^|sort /r') do (
   rd "%%a">nul 2>nul &&echo 空目录"%%a"成功删除!
)
pause

可以复制以上代码粘贴到文本文档,然后修改文件名后缀.txt修改为.bat保存,鼠标右键点击打开即运行(或者以管理员身份运行)。我测试结果如下:

空目录"F:aaabbbccc"成功删除!
空目录"F:aaabbb"成功删除!
空目录"F:aaa"成功删除!
空目录"F:111"成功删除!
请按任意键继续. . .

 

 

上面命令行中“|”的输入方法是按住Shift键按“”键。  

将输入信息来源重定向为指定的设备或文件。系统默认从显示器读取输入信息。
重定向使用举例:
=========================================
@echo off
echo abcdefg——这是文件a.txt中的信息>a.txt
echo 请任意输入字符,以回车结束:
set /p ifo=
cls
echo 【 从屏幕获得的输入信息 】
echo %ifo%
set /p ifo=<a.txt
echo 【 从文件a.txt获得的输入信息 】
echo %ifo%
pause
=========================================

实例二:批量删除多个磁盘的空文件夹

下面的代码可以删除c  d e f 中所有的空文件夹:

@echo off
for %%i in (c d e f) do (
   if exist %%i: (
      for /f "delims=" %%a in ('dir /ad /b /s "%%i:"^|sort /r') do (
         rd "%%a"
      )
   )
)
pause

注意,以上命令会批量删除c d e f盘下所有的空目录,时间可能会长一点,请耐心等待。

 

好了,有了这个批处理程序,以后做整个项目的SVN或git地址切换的时候,提交上传再也不用纠结一个一个排除空目录的苦恼啦。

 

  第二步:命令运行后,当前目录下会生成一个Empties.bat文件,其中包含了逆序排列的所有文件夹的清单。用Word或记事本打开该文件,把每一行内容分别放入一对英文引号之内,然后在每一行前面插入“rd ”前缀(rd后加一个空格)。 

管道符号 |

  以Word为例,按Ctrl+H打开“查找和替换”功能,查找“^p”(不含引号,下同。“^p”可以使用以下方法输入:在“查找和替换”对话框中点“高级”按钮,然后点击“特殊字符→段落标记”),替换成“^prd ”(rd后面加一个空格),然后手工修正第一行和最后一行的内容。保存修改后的Empties.bat文件,进入命令行窗口执行这个批处理文件。Empties.bat将试图删除(即rd命令的作用)每一个文件夹,但包含内容的文件夹不可能用rd命令删除,结果就删除了所有空的文件夹。 

前一个命令的执行结果输出到后一个命令
dir *.* /s/a | find /c ".exe"管道命令表示先执行 dir 命令,对其输出的结果执行后面的 find 命令该命令行结果:
输出当前文件夹及所有子文件夹里的.exe文件的个数

  知其所以然:我们来了解一下前面Dir命令的运行原理:“/ad”要求Dir命令选出所有目录;“/b”表示只显示文件夹名称(不显示Dir命令的标题信息或摘要);“/s”表示搜索,即查找当前文件夹及其所有的子文件夹。Dir命令的输出通过管道命令(“|”)传递给Sort命令。Sort命令的作用是排序,“/r”选项表示逆序排列。 

转义符 ^

  最后,Sort命令的输出被重定向(“>”)到Empties.bat文件。由于要求Sort命令逆序排列输出结果,所以Empties.bat文件中子文件夹总是位于父文件夹的前面,因而删除文件夹时,空的子文件夹总是先被删除,空的父文件夹也得以被删除。可以看到,巧妙运用Windows内建命令,许多表面上看起来复杂的任务也可以轻而易举地完成! 

将特殊符号转化为一般符号,即剥离特殊符号的特殊地位。特殊符号指:| & > <
比如,如果我们想输出符号“>”,直接用命令 echo > 是不行的,必须修改为 echo ^> 。其余几个特殊符号类似需要有同样的处理。
转义字符使用举例:
=========================================
@echo off
echo aaaa>a.txt
echo 第一句echo执行完毕
echo aaaa^>a.txt
echo 第二句echo执行完毕
pause
=========================================
比较上面的两句echo,第一句echo将信息aaaa输出到了文件a.txt,而第二句echo则在直接屏幕上显示除aaaa>a.txt

  小提示:Dir的三个小招数 

逻辑命令符包括:&、&&、||

  ★查看文件夹全部隐藏文件:如果想查看Windows文件夹和它所有子文件夹中全部的隐藏文件,只需输入:DIR C:Windows.* /AH/S/B/P。 

-&顺序执行多条命令,而不管命令是否执行成功
    c: & cd/ & dir /w相当于把下面3行命令写到1行去了c:cd/dir /w
-&&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
    f: && cd/ && dir >c:/test.txt注意如果f盘不存在,那么后面2条命令将不会执行
    find "ok" c:/test.txt && echo 成功如果找到了"ok"字样,就显示"成功",找不到就不显示
-||顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
    find "ok" c:/test.txt || echo 不成功如果找不到"ok"字样,就显示"不成功",找到了就不显示

本文由澳门威尼斯人平台发布于操作系统,转载请注明出处:批处理/DOS命令删除文件夹下某类型的文件

关键词: