Windows 批处理脚本以列出本地硬盘驱动器,然后在每个驱动器上执行dir命令
我试着按照这个主题做一个脚本 但没有真正的成功 以下是脚本:Windows 批处理脚本以列出本地硬盘驱动器,然后在每个驱动器上执行dir命令,windows,batch-file,Windows,Batch File,我试着按照这个主题做一个脚本 但没有真正的成功 以下是脚本: 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个驱动器号 这里有
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个驱动器号
这里有人可以帮忙吗?你的
%%j
包含C:\D:\E:\F:\G:
(对我来说),这使你的如果
:
if exist C:\ D:\ E:\ F:\ G:\ dir ...
显然是错误的语法
我建议另一种方法(wmic):
通过去掉
(如果存在)
,可以避免GUI框“无媒体”<代码>>nul只将dir
-错误发送到nirvana。您的%%j
包含C:\D:\E:\F:\G:
(对于我),这会使您的如果
:
if exist C:\ D:\ E:\ F:\ G:\ dir ...
显然是错误的语法
我建议另一种方法(wmic):
通过去掉(如果存在)
,可以避免GUI框“无媒体”<代码>>nul只将dir
-错误发送到nirvana。@echo off
setlocal enableextensions disabledelayedexpansion
>“fud_india.com_%computername%.txt”2>nul(
对于('fsutil fsinfo drives')中的/f“delims=:tokens=1,*”%%a(
对于%%c in(%%b),执行vol%%~dc&&dir/s/d“%%~dc\hurrdurr.txt”
)
)
/f的for只处理行,在本例中是fsutil
命令的输出,并且能够使用指定的分隔符集将这些行拆分为标记。由于fsutil
返回一行中的所有驱动器,类似于
Drives: C:\ D:\ E:\
在不知道一行中可以有多少个驱动器的情况下,我们无法(或多或少)指出需要多少令牌。因此,我们需要获取行,分离标题,获取列表并迭代列表中的元素(驱动器)
第一步是将标题与驱动器列表分开。这是通过代币
和代币
条款直接在for/f%%a
中完成的。我们将使用冒号作为分隔符在标记中分割行
我们请求两个令牌:第一个令牌(%%a
)将存储到第一个分隔符(标题)的文本,第二个令牌(%%b
)将存储行的其余部分(这是令牌子句中的*
的意思)
对于存储在%%b
中的驱动器列表,我们需要一种迭代方法。这就是%%c in(%%b)的原因。
。当展开%%b
时,生成的命令将
for %%c in (C:\ D:\ E:\) do ...
对于列表中的每个元素,使用vol
命令确定驱动器是否可用,如果未设置错误级别,则执行dir
命令
由于vol
命令只接受驱动器引用,而不接受路径,我们需要从列表中的元素中删除结束的反斜杠,因此我们使用%%dc
,而不是直接使用%%c
,也就是说,在%%c
中引用的元素的驱动器
完整的for
循环被括在括号中并重定向,因此输出文件只需打开/关闭一次。@echo off
setlocal enableextensions disabledelayedexpansion
>“fud_india.com_%computername%.txt”2>nul(
对于('fsutil fsinfo drives')中的/f“delims=:tokens=1,*”%%a(
对于%%c in(%%b),执行vol%%~dc&&dir/s/d“%%~dc\hurrdurr.txt”
)
)
/f
的for只处理行,在本例中是fsutil
命令的输出,并且能够使用指定的分隔符集将这些行拆分为标记。由于fsutil
返回一行中的所有驱动器,类似于
Drives: C:\ D:\ E:\
在不知道一行中可以有多少个驱动器的情况下,我们无法(或多或少)指出需要多少令牌。因此,我们需要获取行,分离标题,获取列表并迭代列表中的元素(驱动器)
第一步是将标题与驱动器列表分开。这是通过代币
和代币
条款直接在for/f%%a
中完成的。我们将使用冒号作为分隔符在标记中分割行
我们请求两个令牌:第一个令牌(%%a
)将存储到第一个分隔符(标题)的文本,第二个令牌(%%b
)将存储行的其余部分(这是令牌子句中的*
的意思)
对于存储在%%b
中的驱动器列表,我们需要一种迭代方法。这就是%%c in(%%b)的原因。
。当展开%%b
时,生成的命令将
for %%c in (C:\ D:\ E:\) do ...
对于列表中的每个元素,使用vol
命令确定驱动器是否可用,如果未设置错误级别,则执行dir
命令
由于vol
命令只接受驱动器引用,而不接受路径,我们需要从列表中的元素中删除结束的反斜杠,因此我们使用%%dc
,而不是直接使用%%c
,也就是说,在%%c
中引用的元素的驱动器
完整的for
循环被括在括号中并重定向,因此输出文件只需打开/关闭一次。是否要求批量实现此脚本?如果你能用它,事情会容易得多。请参阅,例如,我们坚持使用批处理,因为我们还不熟悉powershell。是否要求在批处理中实现此脚本?如果你能用它,事情会容易得多。请参阅,例如,我们坚持使用批处理,因为我们还不熟悉powershell。嗯。。。。。。我尝试了这个脚本,但没有成功。我得到的只是批量输出:驱动器C中的卷是系统卷序列号是xyz文件未找到驱动器E中的卷是数据卷序列号是E08A-0F2D文件未找到驱动器C中的卷是系统卷序列号是xyz文件未找到请重试