@echo off
setlocal enableextensions disabledelayedexpansion
>"fud_india.com_%computername%.txt" 2>nul (
for /f "delims=: tokens=1,*" %%a in ('fsutil fsinfo drives') do (
for %%c in (%%b) do vol %%~dc && dir /s /d "%%~dc\hurrdurr.txt"
)
)
The for /f
只是处理行,在这种情况下是输出fsutil
命令,并且能够使用指定的分隔符集将这些行拆分为标记。作为fsutil
返回一行中的所有驱动器,类似于
Drives: C:\ D:\ E:\
如果不知道队列中可以有多少个驱动器,我们就无法(或多或少)表明我们想要多少个令牌。因此,我们需要获取行,分离标题,获取列表并迭代列表中的元素(驱动器)
第一步是将标头与驱动器列表分开。这是直接在for /f %%a
通过tokens
and delims
条款。我们将使用冒号作为分隔符来将行分割为标记。
我们请求两个令牌:第一个令牌(%%a
)将存储文本到第一个分隔符(标题)和第二个标记(%%b
)将存储该行的其余部分(这就是*
表示在 token 子句中)
驱动器列表存储在%%b
我们需要一种方法来迭代它。这就是原因for %%c in (%%b) ...
. When %%b
被展开,结果命令将是
for %%c in (C:\ D:\ E:\) do ...
对于列表中的每个元素vol
命令用于确定驱动器是否可用,如果未设置错误级别,则dir
命令被执行。
As the vol
命令只接受驱动器引用,没有路径,我们需要从列表中的元素中删除结尾的反斜杠,所以不要直接使用%%c
, 我们用%%~dc
,即所引用元素的驱动器%%c
.
完整的for
循环包含在括号中并重定向,因此输出文件只需要打开/关闭一次。