繁体   English   中英

批处理脚本以列出本地硬盘驱动器,然后在每个驱动器上执行dir命令

[英]batch script to list local hard drives and then do a dir command on each drive

我尝试按照此主题制作脚本

批处理脚本以查找已安装设备的驱动器号

但没有真正的成功。

这是脚本:

SETLOCAL EnableDelayedExpansion
for /f "usebackq tokens=1,*" %%i in (`fsutil fsinfo drives`) do (
    if exist %%j dir /S /D "%%j*hurrdurr.txt" >> fud_india.com_%computername%.txt
)
pause

问题是我得到了结果,但仅适用于1个驱动器号...

有人可以在这里帮忙吗?

@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"
        )
    ) 

for /f仅处理行(在本例中为fsutil命令的输出),并且能够使用指示的一组定界符将这些行拆分为标记。 fsutil在一行中返回所有驱动器时,类似

Drives: C:\ D:\ E:\

并且在不知道行中有多少个驱动器的情况下,我们无法(或多或少)指出我们想要多少个令牌。 因此,我们需要获取该行,分离标题,获取列表并遍历列表中的元素(驱动器)

第一步是将标头与驱动器列表分开。 这可以通过tokensdelims子句直接在for /f %%a完成。 我们将使用冒号作为分隔符,以将行分割成令牌。

我们需要两个令牌:第一个令牌( %%a )将文本存储到第一个定界符(标头),第二个令牌( %%b )将存储其余的行(这就是*含义)在令牌子句中)

使用%%b存储的驱动器列表,我们需要一种对其进行迭代的方法。 这是for %%c in (%%b) ...的原因。 %%b展开时,结果命令将是

for %%c in (C:\ D:\ E:\) do ...

对于列表中的每个元素,使用vol命令确定驱动器是否可用,并且如果未设置错误级别,则执行dir命令。

由于vol命令仅接受驱动器引用,而没有路径,因此我们需要从列表中的元素中删除结尾的反斜杠,因此,我们不直接使用%%c ,而是使用%%~dc ,即%%c中引用了元素。

完整的for循环包含在括号中并进行了重定向,因此输出文件仅需要打开/关闭一次。

您的%%j包含C:\\ D:\\ E:\\ F:\\ G:对我而言),这使您的if

if exist C:\ D:\ E:\ F:\ G:\ dir ...

语法明显错误。

我建议另一种方法(WMIC):

for /f "skip=1" %%i in ('wmic logicaldisk get caption') do (
  dir /s /d %%i\*hurrdurr.txt" >>fud_india.com_%computername%.txt 2>nul
)

通过消除if exist ,可以避免GUI-Box“ no media”。 >nul只会将dir -error发送给必杀技。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM