[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

网上看了一个帖子:
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批处理?
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

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

TOP

本帖最后由 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
复制代码
利用句柄会占用文件的特性删除子目录下多余的同名文件

TOP

原来是利用了rd命令不能删除非空文件夹的特性——精髓啊!

TOP

7# Hello123World

一刀切,空文件夹能删,非空删不了:
for /f .... do rd %%i 2>nul

TOP

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

上面这句代码不能获取空文件夹,你们怎么删除空文件的?

TOP

  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. )
复制代码
解决了。

TOP

3# ygqiang


看来我的第一条代码白发了...

TOP

还有个问题,如何实现在xp系统下,当前所有存在的盘符下面,都能检测运行这个bat呢?

TOP

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


这个方法,可以实现,但如何提高效率呢?
1

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2

TOP

那样一来将会很长很长,处理起来也非常慢,不如只将其作为要提取的数据看待:
  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
复制代码

TOP

返回列表