|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Проверка точности размеров файлов |
|
|
Любой язык - [решено] Проверка точности размеров файлов
|
Ветеран Сообщения: 546 |
Профиль | Отправить 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> В папке, к которой будет относиться этот тхт файл, много файлов, но среди них обязательно присутствуют те, которые есть в блокноте, имена их в точности такие же, что выделено жирным шрифтом. Я должен буду указать пары тхт - папка с файлами, которые необходимо сравнивать, а также слово ориентир, через который скрипт будет находить имена файлов внутри ссылок тхт документа. Известно то, что слово ориентир в ссылках (подчеркнуто на примере), всегда одно и тоже только для одной пары тхт с папкой. Вычислять имя файла в ссылке нужно так.. если от слова ориентира идти влево, то начало имени будет начинаться сразу после первого встречного знака А конец имени файла вычисляется так.. от слова ориентира движемся вправо, и кончаться имя будет перед первым встречным знаком кавычек Размер файла в тхт будет всегда описан между текстом и Размер файла в тхт всегда округляется до десятых.. если размер меньше гигабайта, то будет такой формат.. приме: 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
|
Не тестировал:
$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" |
Последний раз редактировалось Foreigner, 30-03-2015 в 10:33. Отправлено: 10:26, 30-03-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 546
|
Профиль | Отправить 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
|
А имена файлов какие?
00001start_ARM-385_google.com.avi или ARM-385_google.com.avi |
Отправлено: 11:11, 30-03-2015 | #4 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать 00001start_ARM-385_google.com.avi
в точности, как выделено у меня жирным шрифтом. может мне нужно слово ориентир задать?, чтобы скрипту легче было, потому что, где я тестирую, там не start и можно ли добавить несколько пар тхт-папка, или нужно одним скриптом обрабатывать одну пару - тхт? |
|
Отправлено: 11:16, 30-03-2015 | #5 |
Ветеран Сообщения: 1758
|
Alexander_88, Понятно. Просто делать это в воображении не слишком хорошее занятие, сейчас попробую, что-нибудь смоделировать на реальных файлах.
|
Отправлено: 11:32, 30-03-2015 | #6 |
Ветеран Сообщения: 1758
|
Попробуйте пока такой вариант, для одной папки:
$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
|
Профиль | Отправить PM | Цитировать протестировал.. вывелось все... и равное по размеру и разное, только пропущены файлы, которые по размеру 1000 - 1024 MB
пример их: |
Отправлено: 12:52, 30-03-2015 | #8 |
Ветеран Сообщения: 1758
|
|
Отправлено: 13:12, 30-03-2015 | #9 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать исправил, все также как было в первый раз.., я заметил в размерах, которые выводятся в созданном тхт, размер, который находится внутри ссылки тхт, пишется через запятую (хотя в списке ссылок через точку стоит), а размер, который берется с файлы через точку, может в этом дело?
|
Отправлено: 13:21, 30-03-2015 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|