Board logo

标题: [文件操作] [已解决]批处理怎样搜索指定路径中的文件夹,并设置权限? [打印本页]

作者: yy521b    时间: 2011-10-19 23:21     标题: [已解决]批处理怎样搜索指定路径中的文件夹,并设置权限?

本帖最后由 yy521b 于 2011-10-21 10:34 编辑

先上一个简单的代码。
  1. @echo off
  2. cd /d e:\
  3. for /f %%i in ('dir /s/b "linux"') do (
  4. cacls %%i /t /e /c /g 789:r
  5. )
  6. pause
复制代码
这段代码的意思是 搜索E盘中所有的 linux 文件夹, 并添加用户789的只读权限,此代码成功操作。 按理说我要是只想搜索e:\123\ 文件夹下所有linux 文件夹并赋予权限时 我只要将上边的代码 第二行 e:\改成e:\123\ 就应该可以了,但是我改过之后执行此BAT  它只能搜到我的e:/123/linux/下边的linux文件夹!! 呵呵! 有点像绕口令了! 我真不知道怎么组织语言了,我形容一下我的实际环境吧.  就是我e盘下边有一个123的文件夹,123问价夹下边 又有 linux、linux1、linux2、linux3 这四个文件夹,这四个文件夹中都有一个linux文件夹,我现在的目的是 搜索 123问价夹中 所有叫 linux的文件夹并赋予权限, 我用上边的代码操作可以将e盘中所有叫linux的文件夹搜索出来,但是我把第二行的e:\改成e:\123  就只能搜索到 e:\123\linux 及其下边的linux问价夹, 其他的 linux1、linux2、linux3中的linux文件夹搜索不到。不知我形容的是否清楚, 请各位坛友帮忙指导,或者有什么更好的方法解决这个问题,希望赐教。
作者: leeonix    时间: 2011-10-19 23:27

你这句有问题。dir /s/b "linux"
如果你当前文件夹是e:的话,dir /s/b "linux"的意思就是搜索e:\linux下的所有文件夹。
作者: yy521b    时间: 2011-10-19 23:44

回复 2# leeonix

我的e:\ 盘有两个文件夹 一个是 123 一个是456,这两个文件夹下面都有很多的linux 文件夹, 当我用上边的代码对整个E盘搜索时,真的 E盘所有的 linux文件夹都搜出来了,这是真的,我也操作了。但是我只想对123
文件夹进行搜索时就像我上面说的 它只能搜到e:\123\linux   其他的linux1、linux2.。。。下面的linux文件夹搜不到, 请帮忙指正上边的代码,或有什么跟好的办法,谢谢了!
作者: CrLf    时间: 2011-10-19 23:51

以前随风好像也发过一个帖子,貌似是说 dir /s 时,如果存在与关键词同名的文件夹,关键词将被当成目标路径看待,印象中好像没看到纯 dir 的解决方案...
可以用 findstr 筛选
  1. for /f %%i in ('dir /s/b/ad "linux"^|findstr /e \linux') do cacls %%i /t /e /c /g 789:r
复制代码
或者不用 dir
  1. for /r /d %%a in (linux) do if exist %%a cacls %%i /t /e /c /g 789:r
复制代码

作者: awk    时间: 2011-10-19 23:57

  1. @echo off
  2. for /r "E:\123\" %%a in (.) do (
  3.     if "%%~na" equ "linux" (
  4.         cacls "%%a" /t /e /c /g 789:r
  5.     )
  6. )
复制代码

作者: leeonix    时间: 2011-10-20 08:10

去下载一个Unix工具,名字也叫Find。结合xargs一下就可以搞定。。。
作者: yy521b    时间: 2011-10-20 08:53

谢谢 版主 ,您的方法太棒了!!




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