2015-04-07 82 views
0

上我试图让一个脚本下面这个话题批处理脚本列出本地硬盘驱动器,然后做一个dir命令每个驱动器

batch script to find drive letter of a mounted device

,但没有真正的成功。

这是脚本:

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个盘符...

也许任何人都可以帮助吗?

+0

是否需要批处理脚本?如果你可以使用[PowerShell](https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx),情况会更容易。见例如[获取-PSDrive来](https://technet.microsoft.com/en-us/library/hh849796.aspx)。 –

+0

我们坚持批处理,因为我们还不熟悉PowerShell。 – bapa

回答

3
@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循环放在括号中并重定向,因此输出文件只需要打开/关闭一次。

+0

您的脚本有效。你能解释一下,%% c(%% b)代码行是如何工作的吗? – bapa

+0

@bapa,答案已更新,以包含更多关于工作原理的详细信息。 –

+0

嗯...我让这个脚本在域计算机之间完成它的工作之后,在一些我得到错误“Windows - 没有磁盘”,人们无法登录。 :(也许它与fsutil的问题,并没有初始化应尽快? – bapa

1

%%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盒 “没有媒体”; >nul只是发送dir-恐怖涅ana。

+0

嗯......我试过这个脚本,但没有奏效。我得到的是批量输出: 卷在驱动器C是系统 卷序列号是XYZ 文件未找到 卷在E盘是数据 卷序列号是E08A-0F2D 未找到文件 卷在驱动器C是系统 卷序列号是xyz 文件未找到 – bapa

+0

只是再试一次(与另一个文件名,存在于我的驱动器上):在这里工作正常。 – Stephan

+0

是你编写整个脚本的脚本吗?因为我单独尝试,没有任何前脚本的东西,我写了那里,它没有工作?附:我试图在winxp – bapa

相关问题