我们的网络中存在一种病毒,它将所有根目录属性设置为隐藏&系统在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首先会创建完整的文件列表然后开始处理所有事情。)
是否有可能只处理目录NOT文件而不是递归使用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以在批处理文件中使用)
答案 0 :(得分:4)
使用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
从您的问题中,我了解应该避免处理子目录。如果没有,请评论我的答案,我会解决它。
答案 1 :(得分:4)
所以有点晚了 - 但我们刚刚在我们的系统中遇到了同一病毒的新变种 - 进入300+文件夹共享驱动器。把所有东西都清理干净但是为了获得属性,我做了以下工作:
在文件夹中打开cmd提示符并运行: dir / A:DHS / B> FILENAME.TXT
“/ A:DHS”仅输出* D * irectory的列表,即* H * idden和* S * ystem,然后输出* B *是filename.txt
的信息将该文件中的文件夹名称列表复制到excel列B.在A类中输入“attrib -H -S”并将其向下拖动以匹配文件夹名称数
然后在C栏中输入:= A1& “”& CHAR(34)& B1& CHAR(34)
此输出到: attrib -H -S“文件夹名称”
然后向下拖动公式以获取每个foldername的命令。将它们全部选中 - 复制 - 粘贴到记事本中 - 将文件另存为.cmd - 将文件放入出现问题的文件夹中并运行它。
这是有效的,因为它不是试图递归地做任何事情/等它只是运行命令,移动到下一行等等。花了大约3秒钟为我修复了300多个文件夹。
答案 2 :(得分:0)
我相信你不能在一个简单的批处理文件中用attrib命令做你想做的事。虽然我不熟悉它,如果这是一个严重的长期问题(病毒=我真的希望不是),你可能想看看Powershell,因为它可能提供你需要的功能(和更好的可编程性)。