Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本以列出本地硬盘驱动器,然后在每个驱动器上执行dir命令_Windows_Batch File - Fatal编程技术网

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文件未找到请重试