批量代码读取文本文件

时间:2013-09-11 00:01:27

标签: batch-file filereader

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

驱动器列表的代码是:

wmic logicaldisk get name> "abc.txt

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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