Board logo

标题: [文件操作] [已解决]批处理如何将内容加入一对英文引号之内再插入指定字符串? [打印本页]

作者: ygqiang    时间: 2011-6-8 21:39     标题: [已解决]批处理如何将内容加入一对英文引号之内再插入指定字符串?

网上看了一个帖子:
http://www.cnblogs.com/starspace/archive/2009/01/08/1371905.html


什么工具能寻找和删除硬盘上所有空的文件夹,或只包含空的子文件夹的文件夹?杀鸡焉用宰牛刀,其实不用任何软件,直接使用批处理命令就能实现这个目的。

  第一步:进入Windows的MS-DOS窗口(Windows 2000/XP叫命令行提示符),进入要查找空文件夹的驱动器,执行:
  dir /ad/b/s | sort /r >empties.bat
    第二步:命令运行后,当前目录下会生成一个Empties.bat文件,其中包含了逆序排列的所有文件夹的清单。用Word或记事本打开该文件,把每一行内容分别放入一对英文引号之内,然后在每一行前面插入“rd ”前缀(rd后加一个空格)。


其中第二部,如何用bat批处理?
作者: CrLf    时间: 2011-6-8 21:46

那样一来将会很长很长,处理起来也非常慢,不如只将其作为要提取的数据看待:
  1. @more +4 %0 >tmp
  2. copy /b tmp+empties.bat $
  3. move $ empties.bat
  4. exit
  5. @echo off
  6. for /f "skip=3 delims=" %%a in (%~s0) do rd "%%a"
  7. exit
复制代码
如果非要给每行加前缀的话,效率是个问题:
  1. @echo off
  2. (for /f %%a in (empties.bat) do echo rd "%%a")>$
  3. move $ empties.bat
  4. pause
复制代码

作者: ygqiang    时间: 2011-6-8 21:56

dir /ad/b/s | sort /r >empties.bat

@echo off
(for /f %%a in (empties.bat) do echo rd "%%a")>$
move $ empties.bat

call empties.bat

del empties.bat
pause


这个方法,可以实现,但如何提高效率呢?
作者: ygqiang    时间: 2011-6-8 21:57

还有个问题,如何实现在xp系统下,当前所有存在的盘符下面,都能检测运行这个bat呢?
作者: CrLf    时间: 2011-6-8 22:03

3# ygqiang


看来我的第一条代码白发了...
作者: ygqiang    时间: 2011-6-9 01:13

  1. rem 删除空文件夹
  2. for /f "skip=1" %%i in ('wmic logicaldisk where "drivetype=3" get caption') do (
  3.    for /f "tokens=*" %%j in ('dir /s/ad/b %%i') do rd "%%j" 1>nul 2>nul
  4. )
复制代码
解决了。
作者: Hello123World    时间: 2011-6-9 17:19

dir /ad/b/s | sort /r >empties.bat

上面这句代码不能获取空文件夹,你们怎么删除空文件的?
作者: CrLf    时间: 2011-6-9 17:41

7# Hello123World

一刀切,空文件夹能删,非空删不了:
for /f .... do rd %%i 2>nul
作者: Hello123World    时间: 2011-6-9 17:53

原来是利用了rd命令不能删除非空文件夹的特性——精髓啊!
作者: CrLf    时间: 2011-6-9 18:07

本帖最后由 zm900612 于 2011-6-9 19:27 编辑

9# Hello123World


嗯,所以对命令的理解越深,方法就越多、越简洁直接,我一向很喜欢这类暴力的手段,因为它简单有效,粗中有细,能够充分利用命令的特点来简单地进行正向或反向的筛选,这是比我们专门用代码去人为判断要快很多的。

自恋一下,给你看一段我自认为构思精巧的小代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%a in (*.*) do (
  3.    del /f /s "%%~nxa" 3>>"%%a"
  4. ) 2>nul 4>>%~s0
  5. pause
复制代码
利用句柄会占用文件的特性删除子目录下多余的同名文件
作者: Hello123World    时间: 2011-6-9 19:21

10# zm900612
句柄什么的现在我还是不明白,不过这么短的代码可以实现删除同名文件的功能,不说犀利还能说什么呢?




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2