Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] распаковка архивов по нужным папкам (http://forum.oszone.net/showthread.php?t=242484)

muguch 12-09-2012 08:39 1987145

распаковка архивов по нужным папкам
 
Добрый день, форумчане.
Никогда не писал батники, но вот на работе возникла необходимость.
Суть: есть zip архивы вида хх_хххх_[N] и есть папки на сетевом диске вида [N]-[название].
где хх - числа(иногда первая буква, а вторая цифра), хххх - цифры, [N] - номер вида 01,02 ... 43 , который соответствует начальному названию папки на сетевом диске; [название] - название папки.

Необходимо, чтобы архивы разархивировались в соответствующие папки на сетевом диске( хх_ххх_01.zip разархивировался в 01-[название]).

Зарание спасибо за помощь!

Bob256 12-09-2012 17:32 1987470

Если я правильно понял вопрос то...
PHP код:

@for /"tokens=1,2,3,4 delims=_." %%I in ('dir /b "полный путь к архивам\??_????_*.zip"') do @for /"tokens=1,2 delims=-" %%M in ('dir /b "полный путь к папкам\??-*"') do @if "%%K"=="%%M" @7z x "%%~dpnI_%%J_%%K.%%L" -oc:"%%~dpnM-%%N" 

или так
PHP код:

@for /"tokens=1,2,3,4 delims=_." %%I in ('dir /b "полный путь к архивам\??_????_*.zip"') do @for /"tokens=1,2 delims=-" %%M in ('dir /b "полный путь к папкам\%%K-*"') do @7z x "%%~dpnI_%%J_%%K.%%L" -oc:"%%~dpnM-%%N" 


muguch 13-09-2012 08:53 1987773

попробЫвал оба варианта

в случае если батник лежит где угодно(у меня в корне на диске с) вот такая ошибка:
"7z" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

в случае если батник лежит в папке 7z выдает вот такую ошибку:
Error:
cannot find archive

Iska 13-09-2012 09:21 1987783

Код:

… @"%ProgramFiles%\7-Zip\7z.exe" x …

Bob256 13-09-2012 09:43 1987790

Цитата:

Цитата muguch
в случае если батник лежит в папке 7z выдает вот такую ошибку:
Error:
cannot find archive »

а можно увидеть "полный путь к архивам\??_????_*.zip"?
а за одно и "полный путь к папкам\??-*"?

muguch 13-09-2012 09:55 1987801

путь такой: "d:\2\??_????_*.zip" , это я пока пробую и записал путь локально на своем компе

теперь только вторая ошибка:
Error:
cannot find archive

кстати, Bob256, а что означает " ??_????_*.zip " ??

Bob256 13-09-2012 10:19 1987814

Цитата:

Цитата muguch
а что означает " ??_????_*.zip " ?? »

шаблон поискапопробуй в командной строке
Код:

dir /b "d:\2\??_????_*.zip"

yurfed 13-09-2012 10:32 1987817

muguch, Это не вы?

muguch 13-09-2012 11:23 1987838

Bob256, через командную строку все архивы в данной папке находит.
полный путь к папкам так же пробный: с:\2\

yurfed, нет не я.

Bob256 13-09-2012 11:53 1987858

Код:

@echo off
set src=C:\2\
set dst=C:\2\
if not exist "%src%??_????_*.zip" (echo not exist  %src%??_????_*.zip) else (
  for /f "tokens=1,2,3,4 delims=_." %%I in ('dir /b "%src%??_????_*.zip"') do (
    echo archive  %%~dpnI_%%J_%%K.%%L
    if not exist "%dst%%%K-*" (echo not exist %%~dpnK-*) else (
      for /f "tokens=1,2 delims=-" %%M in ('dir /b "%%K-*"') do (
        echo extract to  %%~dpnM-%%N
        "%ProgramFiles%\7-Zip\7z.exe" x "%%~dpnI_%%J_%%K.%%L" -oc:"%%~dpnM-%%N"
      )
    )
  )
)


muguch 13-09-2012 12:02 1987862

Bob256, пишет :

archive c:\d2_0912_02.zip
Файл не найден

почему он ищет в корне С, если указан путь в папку с:\2\ ?
но такой архив в папке d:\2\ сущетсвует...

Bob256 13-09-2012 12:15 1987873

Цитата:

Цитата muguch
но такой архив в папке d:\2\ сущетсвует... »

где искать будем?
Код:

set src=D:\2\
куда положим?
Код:

set dst=D:\2\

muguch 13-09-2012 12:23 1987880

положил батник в папку где лежат архивы d:\2\
после запуска пишет:
archive D:\2\d2_0912_02.zip
not exist D:\2\02-*

Bob256 13-09-2012 13:09 1987900

А папка D:\2\02-* есть?
Цитата:

Цитата muguch
Суть: есть zip архивы вида хх_хххх_[N] и есть папки на сетевом диске вида [N]-[название]. »


muguch 13-09-2012 13:49 1987923

Bob256, по такому пути нет
они находяться в папке С:\2\
Цитата:

Цитата Bob256
Цитата muguch: Суть: есть zip архивы вида хх_хххх_[N] и есть папки на сетевом диске вида [N]-[название]. » »

все правильно, просто архивы не находятся в одной и тойже директории, что папки

Bob256 13-09-2012 14:21 1987943

Код:

set src=D:\2\
set dst=C:\2\

:wall:

muguch 13-09-2012 14:33 1987951

Bob256, и так делал
пишет:
Цитата:

Цитата muguch
archive c:\d2_0912_02.zip
Файл не найден »


Bob256 13-09-2012 14:55 1987972

Пропустил :search:
Код:

@echo off
set src=D:\2\
set dst=C:\2\
if not exist "%src%??_????_*.zip" (echo not exist  %src%??_????_*.zip) else (
  for /f "tokens=1,2,3,4 delims=_." %%I in ('dir /b "%src%??_????_*.zip"') do (
    echo archive  %%~dpnI_%%J_%%K.%%L
    if not exist "%dst%%%K-*" (echo not exist %%~dpnK-*) else (
      for /f "tokens=1,2 delims=-" %%M in ('dir /b "%dst%%%K-*"') do (
        echo extract to  %%~dpnM-%%N
        "%ProgramFiles%\7-Zip\7z.exe" x "%%~dpnI_%%J_%%K.%%L" -oc:"%%~dpnM-%%N"
      )
    )
  )
)


muguch 13-09-2012 15:14 1987983

все равно почему то ищет архив в папке С:\2\

Error:
cannot find archive
archive c:\2\d2_0912_02.zip
extract to c:\2\02-*

7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03

Bob256 13-09-2012 15:42 1988002

Код:

@echo off
set src=D:\2\
set dst=C:\2\
if not exist "%src%??_????_*.zip" (echo not exist  %src%??_????_*.zip) else (
  for /f "tokens=1,2,3,4 delims=_." %%I in ('dir /b "%src%??_????_*.zip"') do (
    echo archive  %src%%%I_%%J_%%K.%%L
    if not exist "%dst%%%K-*" (echo not exist %dst%%%K-*) else (
      for /f "tokens=1,2 delims=-" %%M in ('dir /b "%dst%%%K-*"') do (
        echo extract to  %dst%%%M-%%N
        "%ProgramFiles%\7-Zip\7z.exe" x "%src%%%I_%%J_%%K.%%L" -oc:"%dst%%%M-%%N"
      )
    )
  )
)

и без лишних сообщений
Код:

@echo off
set src=D:\2\
set dst=C:\2\
for /f "tokens=1,2,3,4 delims=_." %%I in ('dir /b "%src%??_????_*.zip"') do for /f "tokens=1,2 delims=-" %%M in ('dir /b "%dst%%%K-*"') do "%ProgramFiles%\7-Zip\7z.exe" x "%src%%%I_%%J_%%K.%%L" -oc:"%dst%%%M-%%N"


muguch 13-09-2012 16:02 1988013

Цитата:

Цитата Bob256
Код:
@echo off
set src=D:\2\
set dst=C:\2\
if not exist "%src%??_????_*.zip" (echo not exist %src%??_????_*.zip) else (
for /f "tokens=1,2,3,4 delims=_." %%I in ('dir /b "%src%??_????_*.zip"') do (
echo archive %src%%%I_%%J_%%K.%%L
if not exist "%dst%%%K-*" (echo not exist %dst%%%K-*) else (
for /f "tokens=1,2 delims=-" %%M in ('dir /b "%dst%%%K-*"') do (
echo extract to %dst%%%M-%%N
"%ProgramFiles%\7-Zip\7z.exe" x "%src%%%I_%%J_%%K.%%L" -oc:"%dst%%%M-%%N"
)
)
)
) »


archive d:\2\d2_0912_02.zip
extract to c:\2\02-*

7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03

Processing archive: d:\2\d2_0912_02.zip


Error: Can not create output directory c:d:\2\02-*\


System error:
Синтаксическая ошибка в имени файла, имени папки или метке тома.

Bob256 13-09-2012 16:20 1988018

Вот я невнимательный...
Код:

"%ProgramFiles%\7-Zip\7z.exe" x "%src%%%I_%%J_%%K.%%L" -o"%dst%%%M-%%N"

muguch 13-09-2012 16:29 1988021

все распаковалось но ... не туда
создались папки в той дериктории где находяться архивы и туда все рапаковалось,т.е в папку d:\2\
а в папку c:\2\ ничего не распаковалось

Bob256 13-09-2012 16:45 1988029

А batник что написал?

muguch 14-09-2012 08:07 1988412

Bob256, написал что распаковал все нормально

archive d:\2\d2_0912_02.zip
extract to c:\2\02-*

7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03

Processing archive: d:\2\d2_0912_02.zip

Extracting PFR-700-Y-2012-ORG-053-001-030719-DCK-12869-DPT-053002-DCK-00000-DIS
-002-DCK-00000.XML
Extracting PFR-700-Y-2012-ORG-053-001-030719-DCK-12870-DPT-053002-DCK-00000-DIS
-002-DCK-00000.XML

Everything is Ok

Files: 2
Size: 34851
Compressed: 4832

Bob256 14-09-2012 08:54 1988432

Как такое возможно?
Цитата:

Цитата muguch
extract to c:\2\02-* »


muguch 14-09-2012 09:13 1988437

Bob256, прости, но я не знаю....
я делаю все то, что ты пишешь, и передаю то что пишет батник...

Bob256 14-09-2012 10:59 1988487

Код:

@echo off
setlocal enabledelayedexpansion
set src=D:\2\
set dst=C:\2\
for %%I in (%src%??_????_*.zip) do (
  set F=%%~nI
  set F=!F:~-2,2!-*
  for /d %%J in (%dst%!F!) do (
    echo archive %%I  extract to %%J
    "%ProgramFiles%\7-Zip\7z.exe" x "%%I" -o"%%J"
  )
)


muguch 14-09-2012 11:13 1988493

Bob256, спасибо тебе огромное !!!!!


Время: 19:07.

Время: 19:07.
© OSzone.net 2001-