循环的批处理文件找不到文本文件



我正试图使用以下代码来获取用户命名为"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",但在第三次尝试后,我没有收到系统再也找不到该文件的消息。

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

再次感谢您提前提供的帮助。

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

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

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

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

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

将其ASCII化。

我不确定您为什么看到报告的结果。但以下内容会给你想要的。

@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输出每行末尾的额外的、不需要的回车。WMIC的输出是unicode,当它将WMIC输出转换为ANSI时,有一个FOR/F异常神秘地附加了额外的回车。

最新更新