Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7

Разжать архив, просмотреть файл, переместить

02.08.2021, 18:14. Показов 2662. Ответов 14

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые коллеги!
Прошу помощи в написании скрипта.
Постоянно работающий скрипт.
Нужно разжать zip в папочке с:\box\in (zip-файлов может быть несколько, разжать можно в с:\box\in"имя файла").
В файле архива несколько файлов, но есть account.txt. Проверить, имеется ли в нём слова first, second, third.
Если что-то из этого имеется, переместить zip-файл в папку с:\box\post
Удалить сам zip и временно разжатые файлы.

Понимаю, насколько плохо выглядит моя просьба помочь, но уже руки опускаются и срок просрочен. Потратил два дня, пытаясь слепить слепить скрипт из отдельных кусочков, надёрганных с форумов , да из документации, но опыта в powershell вообще никакого, а логика в чужих скриптах очень разнае и кусочки друг другом очень плохо сцепляются. Особенно, если не понимаешь кучи всяких параметров. У меня большой опыт в sql, а в процедурных языках у меня практически нулевой уровень. Да и powershell мне кажется, сильно свой синтаксис имеет.
Заранее благодарен тем, кто сможет помочь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2021, 18:14
Ответы с готовыми решениями:

Не сумел переместить содержимое рабочего стола в архив
Утро бодрое! Обращаюсь за помощью, в борьбе с проблемой устал курить гуглы и темы на форуме. Искомое: перемещать ежедневно (в конце...

Добавить файлы в архив и переместить его
Добрый день! Имеется папка с файлами, необходимо зархивировать файлы 7-Zip в один архив с именем - "YYYY-MM-DD" и переместить в...

Как можно переместить строку из таблицы в архив?
Допустим у меня есть таблица в программе, нужно строку таблицы не удалить навсегда, а просто переместить в архив. Как можно это сделать?

14
 Аватар для volodin661
6674 / 2267 / 346
Регистрация: 10.12.2013
Сообщений: 7,836
02.08.2021, 18:27
Цитата Сообщение от Sergey2021_ Посмотреть сообщение
У меня большой опыт в sql
https://www.sqlite.org/zipfile.html
0
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7
02.08.2021, 18:31  [ТС]
Спасибо, но нужен powershell
0
 Аватар для volodin661
6674 / 2267 / 346
Регистрация: 10.12.2013
Сообщений: 7,836
02.08.2021, 18:32
так ты же его не знаешь, зачем он тогда нужен ?
0
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7
02.08.2021, 18:37  [ТС]
Это не для себя, а на работе нужно. На работе ограничений обычно больше, чем на личной машинке.
0
 Аватар для volodin661
6674 / 2267 / 346
Регистрация: 10.12.2013
Сообщений: 7,836
02.08.2021, 18:44
то есть, твою работу сейчас буду делать я, а зарплату получать ты ?
0
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7
02.08.2021, 18:53  [ТС]
Не похоже, что вы что-то собирались делать. Да и не заметил по сайту, что здесь фрилансеры ищут заработки. Насколько понимаю, вы не только сами не хотите помогать, но и создаёте негативное впечатление о вопросе чтобы другие тоже не помогали.
Хотя, может быть, вы сами не знаете как это сделать а просто поддерживаете тему наверху чтобы тоже увидеть решение.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
02.08.2021, 20:09
Лучший ответ Сообщение было отмечено Sergey2021_ как решение

Решение

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using namespace System.IO
using namespace System.IO.Compression
$DebugPreference = "continue"
 
$conf = @{
    sourseDir = "d:\tmp\ZIP"
    middleDir = "d:\tmp\ZIP\middle"
    destinationDir = "d:\tmp\001"
}
 
[Directory]::GetFiles($conf.sourseDir, "*.zip").ForEach{
    $currentZipFileName = $_
    Write-Debug ("Find archive: [{0}]" -f $currentZipFileName)
    [ZipFile]::ExtractToDirectory($currentZipFileName, $conf.middleDir)
    [Directory]::GetFiles($conf.middleDir, "account.txt").ForEach{
        $currentFileName = $_
        Write-Debug ("Find file account.txt: [{0}]" -f $currentFileName)
        $content = [file]::ReadAllText($currentFileName, [System.Text.Encoding]::ASCII)
        if($content.Contains("first") -or $content.Contains("first") -or $content.Contains("first")){
            Write-Debug "content condition: true"
            $newFileName = [path]::Join($conf.destinationDir, [path]::GetFileName($currentFileName))
            [file]::Copy($currentFileName, $newFileName)
            Write-Debug "file copied to: [$newFileName]"
        }
        else{
            Write-Debug "content condition: false"
        }
    }
    [Directory]::GetFiles($conf.middleDir).ForEach{
        [file]::Delete($_)
    }
}
Code
1
2
3
4
DEBUG: Find archive: [d:\tmp\ZIP\account.zip]
DEBUG: Find file account.txt: [d:\tmp\ZIP\middle\account.txt]
DEBUG: content condition: true
DEBUG: file copied to: [d:\tmp\001\account.txt]
Добавлено через 1 минуту
вот готовое решение.

если подходит, можете сходить сюда https://www.protivdtp.ru/

Добавлено через 2 минуты
если дело дойдет до продакшн поменяйте
$DebugPreference = "SilentlyContinue"
1
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7
02.08.2021, 20:10  [ТС]
Цитата Сообщение от alhaos Посмотреть сообщение
вот готовое решение.
Огромнейшее спасибо! Пойду тестить и дописывать под свои реальные условия. Смотрю ваш код и понимаю, что фиг бы я за сегодняшнюю ночь это написал. Вашу ссылку посещу.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
02.08.2021, 20:54
там если каждый файл будет называться acoount.txt он попытается переписать и вылетит по ошибка.

$newFileName поправьте по аналогии

PowerShell
1
[path]::Join("d:\tmp", [string]::Concat([path]::GetFileNameWithoutExtension("D:\tmp\out.txt"), "_" , [guid]::NewGuid(),[path]::GetExtension("D:\tmp\out.txt")))
Добавлено через 26 секунд
к имени файла _guid добавится
1
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7
02.08.2021, 21:25  [ТС]
Цитата Сообщение от alhaos Посмотреть сообщение
поправьте по аналогии
у меня джойна нет. Класса zipfile тоже нет, исправил на старое Expand-Archive $currentZipFileName $conf.middleDir -Force
сейчас как раз пытаюсь исправить $newFileName = [path]::Join($conf.destinationDir, [path]::GetFileName($currentFileName))

Добавлено через 11 минут
PS 5.1.19041.1023
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
02.08.2021, 21:45
https://dotnet.microsoft.com/download
0
0 / 0 / 0
Регистрация: 02.08.2021
Сообщений: 7
02.08.2021, 21:50  [ТС]
Цитата Сообщение от alhaos Посмотреть сообщение
https://dotnet.microsoft.com/download
Не факт, что там, где будет крутиться скрипт, дадут что-то установить. И даже если разрешат, то там согласования будут пару недель. Переписываю под старую версию. Спасибо!
0
03.08.2021, 08:51
 Комментарий модератора 
Цитата Сообщение от volodin661 Посмотреть сообщение
то есть, твою работу сейчас буду делать я, а зарплату получать ты ?
Мы или помогаем, или нет. Все эти разговоры неуместны.
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
03.08.2021, 18:37
Большего отстоя, чем "распаковать -> проверить -> пожать" выдумать сложно. Популярно на пальцах: zip представляет собой последовательно идущие блоки данных пожатых, например, deflate, так что просто открываем zip, извлекаем список файлов, прыгаем на нужный блок и читаем "сырые" данные. Впрочем, в выигрыше остается не столько практичное решение, сколь говнокод.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.08.2021, 18:37
Помогаю со студенческими работами здесь

Создать двоичный файл из 10 записей, просмотреть файл, добавить в файл новую информацию, применить режим прямого доступа
Используя функции и режим меню, создать двоичный файл из 10 записей, просмотреть файл, добавить в файл новую информацию и применить режим...

Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, Выв
Здравствуйте! Если кто-нибудь мог бы помочь в решении только той части где касается написания функции о поиске самого высокого спортсмена...

Как просмотреть Flash-файл
Может у кого есть код как посмотреть флашь файл

Просмотреть текстовый файл построчно
Необходимо написать программу на языке Си: Просмотреть текстовый файл построчно. 24 строки на странице, 80 символов в строке (максимум),...

Разжать папку windows с сохранением разрешений?
Установил сборку Windows Embedded System 7 для слабых ПК, делал чистую установку с авторазбивкой диска и в итоге получил синенькие папочки,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru