批处理文件for循环无法找到文本文件

时间:2014-10-29 00:52:43

标签: batch-file for-loop

我正在尝试使用以下代码来获取用户命名为“New Volume”的驱动器名称,以便在我公司自动执行某些测试用例。

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”,但是在第3次尝试之后,我没有得到系统可以的消息找不到文件了。

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

再次感谢先进的所有帮助。

3 个答案:

答案 0 :(得分:0)

您是否使用管理员权限运行脚本? 如果C:\是Windows驱动器,则需要管理员权限才能在那里创建文件。

答案 1 :(得分:0)

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

因此,可能会删除目标文件(我选择在%temp%下创建文件以避免安全问题)然后故意等待(或调查是否使用tasklist显示某些可执行文件并等待< em> 要终止)

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

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

将其强化。

答案 2 :(得分: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循环用于修剪由FOR / F直接处理时WMIC输出的每一行末尾的额外的不需要的回车。 WMIC输出是unicode,并且有一个FOR / F异常,当它将WMIC输出转换为ANSI时,会神秘地附加额外的回车符。