Команда в цикле FOR (Как получить запрошенные данные) - PullRequest
1 голос
/ 03 апреля 2012

Вчера я видел вопрос о том, как получить информацию о файловом пространстве. Я попробовал команду так:

FOR / F %% A IN ('dir c: \ ^ | findstr / rc: Adr') DO эхо A: "%% A" B: "%% B" C: "%% C" D: "%% D"

Я подумал, что можно извлечь последнюю строку, начиная с моего местного языка с "Adr", твой, вероятно, "Directory". Это не совсем то же самое, потому что вчера я получил в качестве результата вывода саму команду: 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 Ответ

2 голосов
/ 03 апреля 2012

Чтобы перебрать строки, возвращаемые другой командой, вам нужно использовать команду с ключом / f.Подробную информацию смотрите на for /?.

Чтобы получить объем свободного дискового пространства на компьютере с версией Windows для Chech, используйте:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...