我有批处理文件,它在文本文件中写入所有可用驱动器的列表 另一个批处理文件,用于读取该文本文件中的内容(跳过第一行)
驱动器列表的代码是:
wmic logicaldisk get name> "abc.txt
用于读取文本文件的代码是:
FOR /F "skip=1" %%m IN (abc.txt) DO (echo %%m)
只有在手动创建文件时,阅读器批次才有效,为什么?
需要一些解决方案,请帮忙!
答案 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)