2014-10-29 132 views
0

我试图使用下面的代码来获取用户命名为“新卷”的驱动器的名称,以便自动化我们公司的一些测试用例。批处理文件找不到文本文件

wmic logicaldisk get caption,volumeName > c:\batch_script.txt 
for /f "tokens=*" %%A in (c:\batch_script.txt) do echo %%A 
PAUSE 

现在我已经得到了一些与此文件不同的运行时问题;我运行该文件的前2/3时间,我得知系统找不到文件“c:\ batch_script.txt”,但在第三次尝试后,我没有收到系统可以发送的消息再也找不到这个文件了。

我在这里做错了什么?或者wmic命令搞乱了我的文件权限? (因为我必须以管理员身份运行批处理文件才能使wmic命令运行)

再次感谢所有高级帮助。

回答

0

您是否以管理员权限运行脚本? 如果C:\是Windows驱动器,则需要管理员许可在其中创建文件。

0

我会建议wmic可能会调用一些实际上创建该文件的可执行文件,但wmic本身立即返回。我不能看到它发生在我的系统上,但也许...

因此,也许删除目标文件(我选择使文件在%temp%下,以避免安全问题),然后故意等待(或调查是否一些可执行文件会出现使用tasklist,等待终止)

无论如何,wmic输出是unicode的,所以你需要

for /f ... %%A in ('type "yourfilename"') do ... 

到ascify它。

0

我不确定你为什么看到你正在报告的结果。但下面会给你你想要的。

@echo off 
for /f "skip=1 delims=" %%A in (
    'wmic logicaldisk where "volumeName='System Reserved'" get caption' 
) do for /f "delims=" %%B in ("%%A") do echo %%B 

额外FOR/F回路用于修剪一个额外的,不需要回车即在WMIC输出的每一行的末尾时,它是由FOR/F直接处理。 WMIC输出是unicode,并且有一个FOR/F异常,它在将WMIC输出转换为ANSI时神奇地附加了额外的回车符。