![](/img/trans.png)
[英]Is there any way for windows batch script or command prompt to list the directories from a certain folder only without including the hard drive?
[英]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:\
并且在不知道行中有多少个驱动器的情况下,我们无法(或多或少)指出我们想要多少个令牌。 因此,我们需要获取该行,分离标题,获取列表并遍历列表中的元素(驱动器)
第一步是将标头与驱动器列表分开。 这可以通过tokens
和delims
子句直接在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.