Board logo

标题: [系统相关] [已解决]bat如何实现:本地硬盘某个分区下面,删除满足某个特定要求的目录? [打印本页]

作者: ygqiang    时间: 2015-3-31 00:16     标题: [已解决]bat如何实现:本地硬盘某个分区下面,删除满足某个特定要求的目录?

本帖最后由 ygqiang 于 2015-3-31 01:25 编辑

[已解决]bat如何实现:本地硬盘某个分区下面,删除满足某个特定要求的目录?
特定目录的路径,不是固定的。
特定目录名字,也不是固定的。目录名字里面含有的关键字是:隐藏-全

下面的bat代码,如何修改才能实现呢?
  1. echo 本地磁盘:
  2. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  3. fsutil fsinfo drivetype %%a: | find "固定">nul && (echo %%a) && (
  4. del /f /s /q /a ""%%a:\000\隐藏-全\*.*" >nul 2>nul
  5. rd /s /q  "%%a:\000\隐藏-全" >nul 2>nul
  6. for %%b in ("*隐藏-全*") do (
  7. del /f /s /q /a ""%%a:\%%b\*.*" >nul 2>nul
  8. rd /s /q  "%%a:\%%b" >nul 2>nul
  9. )
  10. )
  11. )
复制代码

作者: pcl_test    时间: 2015-3-31 00:57

本帖最后由 pcl_test 于 2015-3-31 08:22 编辑

回复 1# ygqiang
文件夹相互嵌套构成路径,既然路径不定,文件夹名不定,只知道包含特定关键字,那么只能用遍历所有分区及文件夹来匹配
那么可以dir /ad /s /b 盘符:\*隐藏-全*
作者: ygqiang    时间: 2015-3-31 01:09

本帖最后由 ygqiang 于 2015-3-31 01:23 编辑
回复  ygqiang
文件夹相互嵌套构成路径,既然路径不定,文件夹名不定,只知道包含特定关键字,那么只能用 ...
pcl_test 发表于 2015-3-31 00:57



    多谢。。。。帮忙看看这个代码,是否有问题。。。。
  1. echo 本地磁盘:
  2. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  3. fsutil fsinfo drivetype %%a: | find "固定">nul && (echo %%a) && (
  4. for /f "delims=" %%b in ('dir /ad /s /b "%%a:/*隐藏-全*"') do (
  5. echo %%b
  6. del /f /s /q /a "%%b\*.*" >nul 2>nul
  7. rd /s /q  "%%b" >nul 2>nul
  8. )
  9. )
  10. )
复制代码

作者: DAIC    时间: 2015-3-31 08:18

回复 3# ygqiang


    你亲自测试一下吧,如果发现问题再回来问。
作者: ygqiang    时间: 2015-3-31 13:35

本帖最后由 ygqiang 于 2015-3-31 13:42 编辑
  1. @echo off
  2. echo 本地磁盘:
  3. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  4.   fsutil fsinfo drivetype %%a: | find "固定">nul && (
  5.     for /f "tokens=*" %%i in ('dir /s/b/ad "%%a:\*隐藏-全*"') do (
  6.       rd /s/q "%%~si"
  7.     )
  8.   )
  9. )
复制代码
for /f "tokens=*" %%i in
rd /s/q "%%~si"


for /f "delims=" %%b in
rd /s /q  "%%b"

这2个差别主要是:

上面那句可以把引号去掉。如果有引号,两句都可以,如果没有引号,当路径中有空格时,下面那句就会引发错误。
它表示将路径以短路径的方式显示。这在DOS时代为了快速查找目标,将所有的文件(夹)名固定在8个字符以内,超过8个字符的,会以"前6个字符+~%d"的形式显示。

"%%~si"这句等同于%%~si
但"%%b"不等于%%b

保险起见,最好还是用%%~si。因为系统的差别,%%b所返回的路径字符串中可能包含有"号,如果遇到这种情况,那用"%%b"反而会出错了。
当对for的变量进行扩展的时候%%~i会强制将字符串中的引号脱掉。再配合其它属性引用,就能确保你的路径字符串始终是一个合法值。




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