Windows Vista 将 dir 输出管道传输到 attrib 命令

Windows Vista 将 dir 输出管道传输到 attrib 命令

我的电脑中了病毒或其他东西,将外部驱动器根目录中的所有文件夹的属性设置为系统和隐藏,并创建了它们的快捷方式。我现在尝试使用以下命令一次性删除这些属性,但它没有任何作用:

dir /ash /b | attrib -h -s

根据我对这些命令文档的理解,这应该可行。这有什么问题吗?

谢谢

答案1

是的。管道|将程序 1 的输出重定向到程序 2 的输入。但是,你的程序 2 ( attrib),不读取任何输入。它不是为此编写的。相反,它希望在命令行参数中输入文件名。


Unix 风格的系统中有一些工具可用于处理参数管道(尽管在这里相关性不大),它们是:

  • xargs处理将文本输入转换为命令行参数的情况
  • find处理这种递归应用命令的特定情况
  • chmod具有“递归模式”选项的命令

在 Windows 上,如果没有xargs,您将必须执行类似以下操作:

for /f "tokens=*" %f in ('dir/b/ash') do @attrib -r -h -s "%~f"

或者可能:

for /r . %f in (*) do @attrib -r -h -s "%~f"

答案2

实际上你可以用一种更简单的方式来做到这一点:

attrib e:\*.* -s -h /s

E:这将删除从驱动器根目录及其所有子目录开始的所有系统和隐藏属性。/s指示attrib处理子目录。

相关内容