0

我有一个批处理文件,它将所有可用驱动器的列表写入一个文本文件,另一个批处理文件读取该文本文件中的内容(跳过第一行)

驱动器列表的代码是:

wmic logicaldisk get name> "abc.txt

用于读取文本文件的代码是:

FOR /F "skip=1" %%m IN (abc.txt) DO (echo %%m)

只有手动创建文件时,阅读器批处理才有效,为什么?

需要一些解决方案,请帮助!

4

2 回答 2

2

正如 miltonb 所说,WMIC 输出采用带有 BOM 的 unicode UTF-16 格式。

FOR /F 不喜欢 unicode。您可以使用 TYPE 将 unicode 转换为 ANSI。请注意,IN() 子句用单引号括起来,因此 FOR /F 读取命令的输出而不是文件。

FOR /F "skip=1" %%m IN ('type abc.txt') DO (echo %%m)

编辑

可以将 WMIC 命令直接放在 FOR /F IN() 子句中,完全不需要临时文件。

即使 FOR /F 无法读取 unicode 文件,它也可以直接处理 WMIC 的 unicode 输出。不幸的是,它引入了附加到每一行的额外回车的工件(我不知道为什么)。这可能会导致解析问题。有多种方法可以处理这个问题。我最喜欢的是使用一个额外的 FOR /F 循环来去除每一行的终止回车符。

请注意,第二个 FOR /F 在 IN() 子句中使用双引号使其读取字符串。

for /f "skip=1" %%A in ('wmic logicaldisk get name') do for /f %%B in ("%%A") do echo %%B
于 2013-09-11T00:45:48.437 回答
0

问题是 wmic 正在输出 UTF-16 格式,该格式由文件开头的 FF FE 指示(Hex Dump Tool)。命令 FOR 无法理解 Unicode 格式并且没有找到任何东西。

您将需要一个中间步骤将 abc.txt 转换为纯文本。这解释了为什么当您以纯文本格式手动创建文件时,它会按预期工作。将以下内容添加到将进行转换的第二个批处理文件中。

    TYPE abc.txt > abcplain.txt
    FOR /F "skip=1" %%m IN (abcplain.txt) DO (echo %%m)
于 2013-09-11T00:42:00.820 回答