PDA

Показать полную графическую версию : Каким образом задать значение переменной число равное кол-ву папок на диске


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

Затруднительный момент №1
Имеем Диск с каталогами H:\
делаю
C:\>DIR H: /A:D /O:D > H:\list.txt
Файл имеет содержание типа
Том в устройстве 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 байт
8 папок 57*150*357*504 байт свободно

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

NiOl
08-07-2009, 15:21
Можно так:

@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
Момент №2

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

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

NiOl
08-07-2009, 18:00
Мой пример был основан на непосредственном чтении текущего каталога. Если чтение сохраненного каталога из файла важнее, то я хочу предупредить, что "полная" версия исполнения команды 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
Каким образом задать значение переменной число равное кол-ву папок на диске »ещё вариант:
@Echo Off

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




© OSzone.net 2001-2012