FOR循环中的命令(如何获取我请求的数据)

时间:2012-04-03 07:22:16

标签: batch-file cmd

昨天我看到了有关如何获取文件空间信息的问题。我试过这样的命令:

FOR / F %% A IN('dir c:\ ^ | findstr / rc:Adr')DO echo A:“%% A”B:“%% B”C:“%% C”D:“%% D”

我认为有可能提取最后一行,从我的本地语言“Adr”开始,你的可能是“目录”。它不完全一样,因为昨天我得到了命令本身的输出结果:dir c:\ ^ | findstr / rc:Adr。现在我再次在CMD中测试并得到了这个:

C:\>FOR %A IN (dir c:\ ^| findstr /rc:Adr) Do Echo A:"%A"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"dir"B:"%B"C:"%C"D:"%D"
A:"dir"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"c:\"B:"%B"C:"%C"D:"%D"
A:"c:\"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"|"B:"%B"C:"%C"D:"%D"
A:"|"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"findstr"B:"%B"C:"%C"D:"%D"
A:"findstr"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"/rc:Adr"B:"%B"C:"%C"D:"%D"
A:"/rc:Adr"B:"%B"C:"%C"D:"%D"

C:\>FOR %A IN ('dir c:\ ^| findstr /rc:Adr') Do Echo A:"%A"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"'dir"B:"%B"C:"%C"D:"%D"
A:"'dir"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"c:\"B:"%B"C:"%C"D:"%D"
A:"c:\"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"|"B:"%B"C:"%C"D:"%D"
A:"|"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"findstr"B:"%B"C:"%C"D:"%D"
A:"findstr"B:"%B"C:"%C"D:"%D"

C:\>Echo A:"/rc:Adr'"B:"%B"C:"%C"D:"%D"
A:"/rc:Adr'"B:"%B"C:"%C"D:"%D"

C:\>dir c:\ | findstr /rc:Adr
           Adresářů:     6,   Volných bajtů:  1 447 161 856

C:\>

我遇到问题的下一个情况: 如果我想打印文件名:

@Echo off
FOR  %%F IN (dir *.inf) DO (
echo %%F
)

输出中的第一项是dir,然后是文件。我做错了不是为了获取命令本身,而是我要求的数据?

1 个答案:

答案 0 :(得分:2)

要遍历另一个命令返回的行,您需要将其用于带/ f开关的命令。请查看for /?了解详细信息。

要获取具有Chech版本Windows的计算机上的可用磁盘空间量,请使用:

for /f "tokens=4,*" %%A in ('dir c:\ ^| findstr /rc:Adr') do echo %%B

如果您需要与语言无关的解决方案,请使用:

for /f "delims== tokens=2" %%A in ('wmic volume where "DriveLetter='C:'" get FreeSpace /value') do echo %%A

在第二种情况下,您可以省略dir命令并直接遍历文件:

for %%A in (*.inf) do echo %%A