Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Проверка точности размеров файлов

Ответить
Настройки темы
Любой язык - [решено] Проверка точности размеров файлов

Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


Здравствуйте, подскажите, пожалуйста, как можно проверить размеры файлов указанные в тхт документе с размером файлов в папке, и если какие - то из размеров будут не сходиться, то открыть по окончании работы скрипта, блокнот, в котором будут написаны имена не сходившихся файлов вместе с размерами. Притом необходимо сравнивать несколько пар (тхт - папка с файлами)
формат одного тхт документа таков (присутствуют кв. скобки):

Код: Выделить весь код
<a href="http://yandex.ru/file/71a4bcc5a6676/00001start_ARM-385_google.com.avi" target="_blank">[$id] - 1.1 GB</a>
<a href="http://yandex.ru/file/27cd09dd1cb5c/00002start_AVOP-022_google.com.mp4" target="_blank">[$id] - 1.0 GB</a>
<a href="http://yandex.ru/file/8bf07957793df/00003start_BNMC-008_google.com.wmv" target="_blank">[$id] - 1.3 GB</a>
<a href="http://yandex.ru/file/fc5850134442d/00004start_DDT-483_google.com.mkv" target="_blank">[$id] - 4.7 GB</a>
<a href="http://yandex.ru/file/51e6863f8fbca/00005start_DIV-183_google.com.mkv" target="_blank">[$id] - 2.6 GB</a>
<a href="http://yandex.ru/file/ab6d540284892/00006start_DMOW-053_google.com.mp4" target="_blank">[$id] - 1.4 GB</a>
<a href="http://yandex.ru/file/677d9f6c585ef/00007start_DMOW-057_google.com.avi" target="_blank">[$id] - 1.1 GB</a>
<a href="http://yandex.ru/file/05f8020c48834/00008start_DMOW-067_google.com.mp4" target="_blank">[$id] - 1.2 GB</a>
<a href="http://yandex.ru/file/0480b3773d999/00009start_DMOW-068_google.com.avi" target="_blank">[$id] - 1.5 GB</a>

В папке, к которой будет относиться этот тхт файл, много файлов, но среди них обязательно присутствуют те, которые есть в блокноте, имена их в точности такие же, что выделено жирным шрифтом.

Я должен буду указать пары тхт - папка с файлами, которые необходимо сравнивать, а также слово ориентир, через который скрипт будет находить имена файлов внутри ссылок тхт документа. Известно то, что слово ориентир в ссылках (подчеркнуто на примере), всегда одно и тоже только для одной пары тхт с папкой. Вычислять имя файла в ссылке нужно так.. если от слова ориентира идти влево, то начало имени будет начинаться сразу после первого встречного знака
Код: Выделить весь код
/
А конец имени файла вычисляется так.. от слова ориентира движемся вправо, и кончаться имя будет перед первым встречным знаком кавычек
Код: Выделить весь код
"
Размер файла в тхт будет всегда описан между текстом
Код: Выделить весь код
[$id] -
и
Код: Выделить весь код
</a>
Размер файла в тхт всегда округляется до десятых.. если размер меньше гигабайта, то будет такой формат.. приме: 869.4 MB, 456.9 MB и т.д.
Размер файла в тхт всегда округляется в большую сторону если второй знак после запятов 5 и более (пример 5.46 - 5.5 5.53 - 5.5 5.45 - 5.5)

Я указываю данные к примеру

Код: Выделить весь код
С:\\Work\boeviki - папка с файлами
C:\\info\boeviki.txt - txt файл
start - слово ориентир


С:\\Work\fantastika - папка с файлами
C:\\info\fantastika.txt - txt файл
tort - слово ориентир


............................................................
При окончании работы должен открыться тхт файл, в формате:

имя файла <размер файла в папке>/<размер файла, указанный в тхт документе>

Отправлено: 09:14, 30-03-2015

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Не тестировал:
Код: Выделить весь код
$folder = "С:\Work\boeviki"

foreach ($line in (get-content file.txt)) {

    [array] $files += [pscustomobject] @{
    
        f = $([uri]($line -split '<a\shref="|"')[1]).segments[-1]
        s = [double] ($line -split '-\s|\s[GM]B')[1]
        v = ($line -split '\.\d\s|</a')[1]
    
}}


foreach ($file in $files) | where { [io.file]::exists("$($folder)\$($file.f)") } | {

    switch ($file.v) {
    
        'GB' { $s = [math]::round((gi "$($folder)\$($file.f)").length / 1GB,1) }
        'MB' { $s = [math]::round((gi "$($folder)\$($file.f)").length / 1MB,1) }    

    }
    
    "$($file)<$(file.s) $($file.v)><$(s) $($file.v)>" | add-content "C:\info\$($folder.name).txt"
}

invoke-item "C:\info\$($folder.name).txt"
где file.txt -- исходный файл

Последний раз редактировалось Foreigner, 30-03-2015 в 10:33.


Отправлено: 10:26, 30-03-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


вот такое получилось

Код: Выделить весь код
$folder = "D:\00 ext\start"

foreach ($line in (get-content 000links.txt)) {

    [array] $files += [pscustomobject] @{
    
        f = $([uri]($line -split '<a\shref="|"')[1]).segments[-1]
        s = [double] ($line -split '-\s|\s[GM]B')[1]
        v = ($line -split '\.\d\s|</a')[1]
    
}}


foreach ($file in $files) | where { [io.file]::exists("$($folder)\$($file.f)") } | {

    switch ($file.v) {
    
        'GB' { $s = [math]::round((gi "$($folder)\$($file.f)").length / 1GB,1) }
        'MB' { $s = [math]::round((gi "$($folder)\$($file.f)").length / 1MB,1) }    

    }
    
    "$($file)<$(file.s) $($file.v)><$(s) $($file.v)>" | add-content "C:\info\$($folder.name).txt"
}

invoke-item "C:\info\$($folder.name).txt"
в результате синее окно открывается, потом закрывается через секунду, и все..

Отправлено: 11:08, 30-03-2015 | #3


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


А имена файлов какие?
00001start_ARM-385_google.com.avi
или
ARM-385_google.com.avi

Отправлено: 11:11, 30-03-2015 | #4


Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


00001start_ARM-385_google.com.avi

в точности, как выделено у меня жирным шрифтом.
может мне нужно слово ориентир задать?, чтобы скрипту легче было, потому что, где я тестирую, там не start

и можно ли добавить несколько пар тхт-папка, или нужно одним скриптом обрабатывать одну пару - тхт?

Отправлено: 11:16, 30-03-2015 | #5


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Alexander_88, Понятно. Просто делать это в воображении не слишком хорошее занятие, сейчас попробую, что-нибудь смоделировать на реальных файлах.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:32, 30-03-2015 | #6


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Попробуйте пока такой вариант, для одной папки:
Код: Выделить весь код
$folder = get-item "D:\00 ext\start"

foreach ($line in (get-content 000links.txt)) {

    [array] $files += [pscustomobject] @{
    
        f = $([uri]($line -split '<a\shref="|"')[1]).segments[-1] -replace '%20',' '
        s = [double] ($line -split '-\s|\s[GM]B')[1]
        v = ($line -split '\.\d\s|</a')[1]
    
}}

$files | where {[io.file]::exists("$($folder)\$($_.f)")} | 

    foreach {
    
        $file = $_

        switch ($file.v) {
    
            'GB' { $s = [math]::round((gi "$($folder)\$($file.f)").length / 1GB,1) }
            'MB' { $s = [math]::round((gi "$($folder)\$($file.f)").length / 1MB,1) }    

        }
    
        "$($file.f)<$($file.s) $($file.v)><$($s) $($file.v)>" | add-content "C:\Info\$($folder.name).txt"
}

invoke-item "C:\Info\$($folder.name).txt"
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:00, 30-03-2015 | #7


Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


протестировал.. вывелось все... и равное по размеру и разное, только пропущены файлы, которые по размеру 1000 - 1024 MB

пример их:

Код: Выделить весь код
<a href="http://yandex.ru/file/59c637e386ddd/00001start_PTJ-005_A_google.com.wmv" target="_blank">[$id] - 1 001.1 MB</a>
<a href="http://yandex.ru/file/91cf94be61523/00027start_CC-122_google.com.avi" target="_blank">[$id] - 1 023.3 MB</a>

Отправлено: 12:52, 30-03-2015 | #8


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Alexander_88, Измените эту строку:
Код: Выделить весь код
s = [double] (($line -split '-\s|\s[GM]B')[1] -replace '\s')

Отправлено: 13:12, 30-03-2015 | #9


Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


исправил, все также как было в первый раз.., я заметил в размерах, которые выводятся в созданном тхт, размер, который находится внутри ссылки тхт, пишется через запятую (хотя в списке ссылок через точку стоит), а размер, который берется с файлы через точку, может в этом дело?

Код: Выделить весь код
<934,5 MB><934.5 MB>

Отправлено: 13:21, 30-03-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Проверка точности размеров файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление файлов по дате больших размеров. Sony777 Скриптовые языки администрирования Windows 11 03-06-2012 16:23
Любой язык - [решено] Вывод списка файлов и их размеров в байтах из заданной папки Vadikan Скриптовые языки администрирования Windows 6 18-03-2011 23:16
VBS/WSH/JS - Проверка и удаление файлов AndrewZ Скриптовые языки администрирования Windows 2 04-03-2011 16:56
Разное - Проблема с переносом файлов больших размеров на плеер The_Berzerker Накопители (SSD, HDD, USB Flash) 2 01-07-2010 07:45
Проверка защищенных файлов SergOst Microsoft Windows NT/2000/2003 11 15-10-2006 18:07




 
Переход