Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Каким образом задать значение переменной число равное кол-ву папок на диске (http://forum.oszone.net/showthread.php?t=144533)

uptk 08-07-2009 15:05 1162085

Каким образом задать значение переменной число равное кол-ву папок на диске
 
В скриптах не силен.
Есть сложная для меня задача, с которой хочу разобраться сам.
Прошу помощи в затруднительных моментах.

Затруднительный момент №1
Имеем Диск с каталогами H:\
делаю
Код:

C:\>DIR H: /A:D /O:D > H:\list.txt
Файл имеет содержание типа
HTML код:

Том в устройстве H имеет метку DATA
 Серийный номер тома: BC8E-B34E

 Содержимое папки H:\

10.06.2009  10:55    <DIR>          XSpider 7.0.947 Russian Full
16.06.2009  11:25    <DIR>          Rootkit Revealer
16.06.2009  11:25    <DIR>          Rootkit Unhooker
17.06.2009  10:49    <DIR>          avz4
24.06.2009  16:23    <DIR>          Dameware.NT.Utilities.v6.7.0.7
06.07.2009  12:34    <DIR>          ESET-4
08.07.2009  13:52    <DIR>          ..
08.07.2009  13:52    <DIR>          .
              0 файлов              0 байт
              [b]8 папок[/b]  57*150*357*504 байт свободно

Каким образом задать значение переменной число равное кол-ву папок на диске
SET $NumberFolder=?

NiOl 08-07-2009 15:21 1162105

Можно так:

Код:

@echo off
rem Подсчет кол-ва подкаталогов в текущем каталоге

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

Set Total=0
for /D %%D in (*.*) do set /a Total+=1

Echo Подкаталогов всего %Total%

Но здесь не будут учтены подкаталоги с аттрибутом hidden

uptk 08-07-2009 17:25 1162217

Момент №2

Каким образом задать значение переменной,
1) имя самого старого(по времени создания) каталога
или
2) имя первого каталога из файла Н:\list.txt

Вариант 1) и вариант 2) равнозначны по содержанию

NiOl 08-07-2009 18:00 1162250

Мой пример был основан на непосредственном чтении текущего каталога. Если чтение сохраненного каталога из файла важнее, то я хочу предупредить, что "полная" версия исполнения команды DIR меняется вместе с виндой и разбираться после обновления, почему скрипт просто не работает (в лучшем случае), а то и делает что-либо нехорошее - будет крайне затруднительно.

Посему предлагаю использовать создание файла с доп. ключом /B, а также устроить инверсию сортировки в ключе /O, что при выполнении C:\>DIR H: /B /A:D /O:-D > H:\list.txt даст более симпотичный результат:
Код:

TEMP
!
!NotSaved
BootUSB
DMDE
!Tales
WINDOWS
Documents and Settings
Program Files
RECYCLER

Сразу сделаю оговорку - при попытке работать с каталогами, содержащими некореектные (с точки зрения ХР) символы с включенными расширениями - ждите проблемы (в моем примере это каталоги !, !NotSaved, !Tales).

После внесения коррекции в команду DIR достаточно пробежаться по файлу, сохраняя в нужной переменной имя каталога - останется самый последний, который и нужен.

Код:

@Echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
set Disk=H:

dir %Disk% /B /A:D /O-D>%Disk%\List.txt
set Total=0
for /F %%D in (%Disk%\List.txt) do (
set SubDir=%%D
set /a Total+=1
)

echo %Total%: "%SubDir%"

В результате в переменных Total и SubDir находятся кол-во каталогов и самый древний каталог.

amel27 08-07-2009 19:02 1162313

Цитата:

Цитата uptk
Каким образом задать значение переменной число равное кол-ву папок на диске »

ещё вариант:
Код:

@Echo Off

For /F %%i In ('DIR /B/A:D H:\*^|Find /C /V "\"') Do Set $NumberFolder=%%i
Echo Кол-во каталогов: %$NumberFolder%



Время: 16:50.

Время: 16:50.
© OSzone.net 2001-