我们的网络中有一种病毒,它在 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/