windows - bat 文件 : Command to change only folders attributes not recursively

标签 windows batch-file directory attr

我们的网络中有一种病毒,它在 USB 闪存驱动器上设置所有根目录属性隐藏和系统,并创建 lnk 文件,运行 cmd.exe,病毒本身然后打开目录,所以为了治愈这些驱动器,我使用命令:

attrib -s -h -r /d /s
del /q /s *.lnk
rd /q /s recycler

但是有一个问题:命令“attrib -s -h -r/d/s”递归处理所有文件和目录,如果有很多文件和目录,则需要很长时间(看起来 Windows 首先创建完整的文件列表然后开始处理一切)。

有没有可能只处理目录而不是文件,而不是递归地使用 bat 文件?

就像在 perl 中一样:

opendir D, '.';
while($_ = readdir D){
    if(-d $_){
        #do something
        }
    }
closedir D;

谢谢。

-- UPD:2012-01-31,解决方案:

for /f "delims=" %i in ('dir /ad /ah /b') do @attrib -r -s -h -a "%i"

(将 %i 替换为 %%i 以在批处理文件中使用)

最佳答案

使用 FOR 命令,将 DIR 输出作为工作列表。

例如你从这个开始:

attrib /s /d
   SHR     C:\a\a.1
   SHR     C:\a\a.2
   SHR     C:\a\a.3
   SHR     C:\a
   SHR     C:\b
   SHR     C:\c
   SHR     C:\d
A          C:\x.txt
A          C:\y.txt
A          C:\z.txt

其中a、b、c、d是目录,a有子目录。键入此命令(如果放入批处理文件,请记住使用 %%):

for /f %i in ('dir /ad /ah /b') do @attrib -r -s -h %i

哪个会给你你想要的:

attrib /s /d
   SHR     C:\a\a.1
   SHR     C:\a\a.2
   SHR     C:\a\a.3
           C:\a
           C:\b
           C:\c
           C:\d
A          C:\x.txt
A          C:\y.txt
A          C:\z.txt

从你的问题来看,我了解到应该避免处理子目录。如果没有,请评论我的答案,我会修复它。

关于windows - bat 文件 : Command to change only folders attributes not recursively,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412316/

相关文章:

java - 需要 URL 的最高目录

c - 验证 _tmkdir 是否成功

c - GetOverlappedResult(bWait=TRUE) 与 WaitForSingleObject() 对于重叠 I/O

c++ - 在 C++ 中以微秒的分辨率测量时间?

c# - 标题栏不可点击 Form.TransparencyKey = White

java - 用shellscript编译java代码,包括几个文件(.jars .class)

batch-file - 如何通过浏览弹出窗口设置路径?

python - 批量感叹号变量

windows - Windows 服务可以接收 Windows 消息吗?

java - (Android)如何仅浏览包含音乐的文件夹