Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/60: Рейтинг темы: голосов - 60, средняя оценка - 4.63
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
1

Копирование файлов с определенным именем и за текущую дату и двойная распаковка ARJ-архива

20.02.2013, 13:37. Просмотров 11833. Ответов 40
Метки нет (Все метки)

Добрый день!
Опыта создания батников пока мало, поэтому обращаюсь за помощью к более знающим людям.
Нужно создать батник, котороый бы делал:
1. Искал в определенной папке файлы, который начинаются на "sz", то есть там много разных файлов, а нам нужны именно те, у которых вначале стоят эти буквы.
2. Искать нужно эти файлы только за текущий день, то есть сегодня запускаю, то и за сегодня ищет.
3. Ну и найденные файлы переносить в другой каталог.

Помогите в решении этой задачки
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 13:37
Ответы с готовыми решениями:

Извлечение из архива .ARJ с переименованием файлов
Добрый день! Есть папка с архивами типа dd.mm.yyyy namefile.arj внутри архива один файл без...

Разархивирование файлов по маске из архивов ARJ, RAR, ZIP с удалением из архива
Здравствуйте! Необходимо разархивировать файлы с определенной маской из архива в текущий каталог...

Распаковка архива с расширением .arj
Всем доброго времени суток. Ребята, не подскажите как можно распаковать архив с расширением .arj?...

Распаковка архива форматом ARJ
Здравствуйте, изначально пробовал аналог распаковки zip фаила, но ничего не выходит, много гуглил,...

Распаковка архива с именем архива по маске
Всем привет! Понимаю, что тема с архивами уже избитая, но все же есть определенная задача. Прошу...

40
Dragokas
Эксперт WindowsАвтор FAQ
17093 / 7148 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
20.02.2013, 14:48 2
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
::Введите ключ условий поиска даты:
::w (write) - по дате модификации
::c (create) - по дате создания
set sortkey=c
::введите маску для искомых файлов
set mask=sz*.*
::введите исходную папку
set src=l:\bash\DateCheck\from
::введите целевую папку
set dest=l:\bash\DateCheck\To
 
for /f "tokens=1-3*" %%a in ('dir "%src%\%mask%" /a-d /-c /t:%sortkey%') do (
  if %%a==%date% (>nul move /y "%src%\%%d" "%dest%"& echo %%d)
)
pause>nul
1
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
20.02.2013, 15:59  [ТС] 3
Вау, круто как! Заработало))))
Огромнейшее спасибо

Добавлено через 39 минут
Ну вот, только порадовался, тут новая задача.
В общем, всё то, что делали, правильно, просто теперь после того как перенесли (я правда изменил немного, поставил не перенести, а скопировать, забыл вначале сказать об это), то эти файлы с расширением определенным, нам их все нужно переделать с расширением .arj
Это возможно сделать?
Если да, то после файл с расширением .arj нужно разархивировать, там находится ещё один архив, его тоже нужно разархивировать. То есть разархивирование нужно сделать 2 раза. Блин, запутанно как-то объяснил.
Сможете помочь? Я вообще теряюсь как это сделать...

Добавлено через 24 минуты
Да, забыл добавить, что извлеченный файл из первого архива также с расширением .arj
0
Dragokas
Эксперт WindowsАвтор FAQ
17093 / 7148 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
20.02.2013, 16:16 4
Можете хотя бы приблизительно обрисовать структуру файла-архива.

То как я понял:

Исходный файл: ИМЯ.какое-то расширение

1) -> копируем в Другая папка\ИМЯ.arj
2) Распаковуем ИМЯ.arj -> ... сколько тут файлов-архивов получится? - 1 или несколько - их все распаковывать. Куда, в какую папку? Такую же, как и имя архива или без создания папки?
3) Распаковуем снова...
0
20.02.2013, 16:16
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
20.02.2013, 16:41  [ТС] 5
Ну к нам приходят шифрованные файлы, называются "ИМЯ.какое-то расширение", расширение называется цифрами.
Копируем этот файл в другой каталог, меняем ему расширение в .arj, имя ему оставляем то же.
Потом разархивирываем тот скопированный и переименованный файл в ту же папку(тогда надо будет удалить первый скопированный и переименованный файл, дабы цикличность не получилась?). Там получается после разархивации 1 новый файл-архив с расширением .arj. И вот его надо ещё раз разархивировать, там разные файлы, с ними уже ничего ненужно делать
0
Dragokas
Эксперт WindowsАвтор FAQ
17093 / 7148 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
20.02.2013, 20:39 6
sairis123, чем удобнее распаковывать Winar или 7-Zip (7-Zip бесплатен) ?

Добавлено через 3 часа 32 минуты
Попробуйте, не проверял.

Bash
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
@echo off
::Введите ключ условий поиска даты:
::w (write) - по дате модификации
::c (create) - по дате создания
set sortkey=c
::введите маску для искомых файлов
set mask=sz*.*
::введите исходную папку
set src=l:\bash\DateCheck\from
::введите целевую папку
set dest=l:\bash\DateCheck\To
::введите полный путь к архиватору 7-zip (7za.exe, 7z.exe - без разницы)
set path7z=c:\Program Files\7-Zip\7za.exe
 
if not exist "%dest%" md "%dest%"
 
for /f "tokens=1-3*" %%a in ('dir "%src%\%mask%" /a-d /-c /t:%sortkey%') do (
  if %%a==%date% (>nul copy /y "%src%\%%d" "%dest%\*.arj"& echo %%d)
  "%path7z%" e -o"%dest%\%%~nd" -y "%dest%\%%~nd.arj"
  del /f "%dest%\%%~nd.arj"
  for %%e in ("%dest%\%%~nd\*.arj") do (
    "%path7z%" x -y "%%e"
    del /f "%%e"
  )
)
 
pause>nul
1
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
21.02.2013, 09:25  [ТС] 7
У нас WinRar стоит, я его прописал
Сейчас как файлы за сегодня придут, попробую тот код, который вы написали, тогда если будут проблемы отпишусь. Заранее спасибо!
0
sov44
1761 / 745 / 128
Регистрация: 09.04.2011
Сообщений: 1,319
21.02.2013, 10:43 8
Цитата Сообщение от sairis123 Посмотреть сообщение
У нас WinRar стоит
Установите лучше 7 Zip (лучшее сжатие, больше возможностей, бесплатный) и код не придётся переделывать.
http://forum.oszone.net/thread-237913-5.html
2
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
21.02.2013, 16:52  [ТС] 9
Попробовал сейчас сделать, итог такой:
Создалась папка с именем архива,но нигде никаких файлов нет Хотя вручную проверил,там всё есть... А никак не получится сделать,чтобы папка не создавалась с первоначальным именем архива?

Добавлено через 6 минут
Да,кстати, делал исходный код, установил 7 Zip
0
Dragokas
Эксперт WindowsАвтор FAQ
17093 / 7148 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
21.02.2013, 17:24 10
ну а команда
Bash
1
"c:\Program Files\7-Zip\7za.exe" e somefile.arj
успешно отрабатывает?

Может не смог разобрать алгоритм упаковки. Вручную 7zip открывает?
0
sov44
1761 / 745 / 128
Регистрация: 09.04.2011
Сообщений: 1,319
21.02.2013, 23:15 11
sairis123, попробуйте так
Bash
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
@echo off
SetLocal enabledelayedexpansion
::Введите ключ условий поиска даты:
::w (write) - по дате модификации
::c (create) - по дате создания
set sortkey=c
::введите маску для искомых файлов
set mask=sz*.*
::введите исходную папку
set src=d:\1
::введите целевую папку
set dest=d:\2\%date%
::введите директорию установки 7z
set arh="c:\Program Files\7-Zip\7z.exe"
 
:: отбор файлов и первая распаковка
if not exist %dest% md %dest%
for /f "tokens=1-4 delims= " %%a in ('dir /a-d /t%sortkey% "%src%\%mask%" 2^>nul') do (
    if "%%a"=="%date%" (
    set tempdir="%dest%\%%d\1"& md !tempdir! 2>nul
    >nul copy /y "%src%\%%d" "%dest%\%%d\"
        >nul %arh% e "%dest%\%%d" -o!tempdir!&& call :1 "%dest%\%%d"&& del /q "%dest%\%%d\%%d"
 ))
pause
exit
 
:: вторая распаковка
:1
for /f "delims=" %%z in ('dir /b /a-d "%~1\1\*"') do (
>nul %arh% e "%~1\1\%%z" -o"%~1"&& rd /s /q "%~1\1"
)
GoTo :EOF
1
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
22.02.2013, 08:09  [ТС] 12
Добавлено через 1 минуту
Цитата Сообщение от Dragokas Посмотреть сообщение
ну а команда
Bash
1
"c:\Program Files\7-Zip\7za.exe" e somefile.arj
успешно отрабатывает?

Может не смог разобрать алгоритм упаковки. Вручную 7zip открывает?
Да, всё отрабатывает нормально, но вот только сейчас заметил, что распакованный файлы он мне на рабочий стол кладет

Добавлено через 6 минут
sov44,
Попробовал, всё тоже хорошо получается, спасибо за помощь Только получается, что всё равно создается в нужной директории папка с первоначальным именем файла, и в ней находятся эти файлы, которые мне нужны. Просто программа такая стоит,что автоматически должна забирать эти файлы, по вложенным папкам не умеет лазить, поэтому хотелось бы, чтобы эти файлы в итоге были в той папке, в которую переносили первоначальный файл.
Возможно так сделать?
0
sov44
1761 / 745 / 128
Регистрация: 09.04.2011
Сообщений: 1,319
22.02.2013, 09:51 13
Цитата Сообщение от sairis123 Посмотреть сообщение
Только получается, что всё равно создается в нужной директории папка с первоначальным именем файла, и в ней находятся эти файлы, которые мне нужны.
К этому и стремился
Из сообщений довольно сложно понять, что требуется, поэтому разъясните на примере:
есть файл file дважды упакованый в arj (без расширения) в директории d:\1
в какой директории должен оказаться распакованный файл?
0
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
22.02.2013, 09:58  [ТС] 14
В директории d:\1 и должен оказаться
0
sov44
1761 / 745 / 128
Регистрация: 09.04.2011
Сообщений: 1,319
22.02.2013, 10:28 15
Тогда наверное так
Bash
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
@echo off
SetLocal enabledelayedexpansion
::Введите ключ условий поиска даты:
::w (write) - по дате модификации
::c (create) - по дате создания
set sortkey=c
::введите маску для искомых файлов
set mask=sz*.*
::введите исходную папку
set src=d:\1
::введите директорию установки 7z
set arh="c:\Program Files\7-Zip\7z.exe"
 
:: отбор файлов и первая распаковка
for /f "tokens=1-4 delims= " %%a in ('dir /a-d /t%sortkey% "%src%\%mask%" 2^>nul') do (
    if "%%a"=="%date%" (
    set tempdir="%src%\TM"& md !tempdir! 2>nul
    >nul %arh% e "%src%\%%d" -o!tempdir!&& call :1 "!tempdir!"&& del /q "%src%\%%d"
 
 ))
pause
exit
 
:: вторая распаковка
:1
for /f "delims=" %%z in ('dir /b /a-d "%~1\*"') do (
>nul %arh% e "%~1\%%z" -o"%src%"&& rd /s /q "%~1"
)
GoTo :EOF
0
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
22.02.2013, 11:39  [ТС] 16
Я извнияюсь, опять неправильно обяъяснил.
В общем вот как должно быть:
1. Есть директория d:\1, мы оттуда переносим файлы, которые начинаются на sz в директорию d:\2
2. В директории d:\2 и должны в итоге оказаться распакованные файлы

Вроде правильно рассказал, извиняюсь за свою неграмотность
0
sov44
1761 / 745 / 128
Регистрация: 09.04.2011
Сообщений: 1,319
22.02.2013, 12:51 17
Bash
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
33
@echo off
SetLocal enabledelayedexpansion
::Введите ключ условий поиска даты:
::w (write) - по дате модификации
::c (create) - по дате создания
set sortkey=c
::введите маску для искомых файлов
set mask=sz*.*
::введите исходную папку
set src=d:\1
::введите целевую папку
set dest=d:\2
::введите директорию установки 7z
set arh="c:\Program Files\7-Zip\7z.exe"
 
:: отбор файлов и первая распаковка
if not exist %dest% md %dest%
for /f "tokens=1-4 delims= " %%a in ('dir /a-d /t%sortkey% "%src%\%mask%" 2^>nul') do (
    if "%%a"=="%date%" (
        set tempdir="%dest%\1"& md !tempdir! 2>nul
        >nul copy /y "%src%\%%d" "%dest%\"
            >nul %arh% e "%dest%\%%d" -o!tempdir!&& call :1 "%dest%\1"&& del /q "%dest%\%%d"
    )
)
pause
exit
 
:: вторая распаковка
:1
for /f "delims=" %%z in ('dir /b /a-d "%~1\*"') do (
    >nul %arh% e "%~1\%%z" -o"%dest%"&& rd /s /q "%~1"
)
GoTo :EOF
1
sairis123
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 9
22.02.2013, 15:22  [ТС] 18
Работает на все сто процентов!!!! Ребята, спасибо вам большое, буду теперь тоже изучать и писать батники, просто времени мало было, нужно было срочно
Ещё раз огромное спасибо!!!!
0
orgia
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 1
04.06.2013, 13:10 19
а как бы оставив идею этой же, но искать за последние 2 дня?
0
Dragokas
Эксперт WindowsАвтор FAQ
17093 / 7148 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
04.06.2013, 14:56 20
Попробуйте удалить 19 и 23 строки.

А строку 18 заменить на эту:

Bash
18
for /f "delims=" %%d in ('FORFILES /p "%src%" /M "%mask%" /d +2') do (
0
04.06.2013, 14:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 14:56

Распаковка архива с заменой файлов
Здравствуйте. Использую код: ZipFile zf = new ZipFile("content.zip"); ...

Распаковка архива с заменой файлов
Как сделать распаковку архива с заменой файлов? using (ZipFile zip =...

Распаковка архива с заменой файлов
Здравствуйте мне нужно распаковать zip заменой файлов, я делал так: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru