Компьютерный форум 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=294902)

kirillius 03-02-2015 11:11 2465629

Поиск и распаковка архивов по маске
 
Здравствуйте.

Задача такая: в сетевой папке найти архивы ZIP или RAR с определённым именем и распаковать их в другую сетевую папку.
На данный момент скрипт выглядит так:

Код:

"C:\Program Files\7-Zip\7z.exe" x "\\СетевойАдрес\СетеваяПапка1\*2015.rar" -o"\\СетевойАдрес\СетевайПапка2" -r -y
"C:\Program Files\7-Zip\7z.exe" x "\\СетевойАдрес\СетеваяПапка1\*2015.zip" -o"\\СетевойАдрес\СетевайПапка2" -r -y
PAUSE

Но нужно усовершенствовать скрипт, т.к. до "2015.rar" и "2015.zip" может идти что угодно, а нужно, чтобы выбирались файлы с определённым количеством символов до 2015, и чтобы это были именно цифры.

Можно ли такое реализовать, и как?

Iska 03-02-2015 11:21 2465632

Цитата:

Цитата kirillius
с определённым количеством символов до 2015, и чтобы это были именно цифры. »

Код:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:-d "C:\Песочница\065\*2015.rar" "C:\Песочница\065\*2015.zip" ^| findstr.exe /r /c:"^[0-9][0-9][0-9][0-9][0-9]2015.rar$" /c:"^[0-9][0-9][0-9][0-9][0-9]2015.zip$"`
) do echo [%%~i]

endlocal
exit /b 0

отберёт Вам .zip и .rar архивы, имена которых начинаются на 5 цифр и заканчиваются на «2015». Принцип понятен?

kirillius 03-02-2015 11:50 2465644

Цитата:

Цитата Iska
Принцип понятен? »

Как отобрать вроде понял, но как потом начать распаковку этих архивов?

Iska 03-02-2015 12:04 2465650

Как-то так (не проверялось):
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:-d "\\СетевойАдрес\СетеваяПапка1\*2015.rar" "\\СетевойАдрес\СетеваяПапка1\*2015.zip" ^| findstr.exe /r /c:"^[0-9][0-9][0-9][0-9][0-9]2015.rar$" /c:"^[0-9][0-9][0-9][0-9][0-9]2015.zip$"`
) do "%ProgramFiles%\7-Zip\7z.exe" x "\\СетевойАдрес\СетеваяПапка1\%%~i" -o"\\СетевойАдрес\СетевайПапка2" -r -y

endlocal
exit /b 0


kirillius 03-02-2015 12:28 2465659

Цитата:

Цитата Iska
Как-то так (не проверялось): »

Проверил на локальных папках - что-то не получилось...

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:-d "C:\Users\username\Desktop\folder_01\*2015.rar" "C:\Users\username\Desktop\folder_01\*2015.zip" ^| findstr.exe /r /c:"^[0-9][0-9][0-9][0-9]2015.rar$" /c:"^[0-9][0-9][0-9][0-9]2015.zip$"`
) do "%ProgramFiles%\7-Zip\7z.exe" x "C:\Users\username\Desktop\folder_01\%%~i" -o"C:\Users\username\Desktop\folder_02\" -r -y

endlocal
exit /b 0


Iska 03-02-2015 12:44 2465670

Запустите командную строку. Вставьте в неё команду:
Код:

dir /b /a:-d "C:\Users\username\Desktop\folder_01\*2015.rar" "C:\Users\username\Desktop\folder_01\*2015.zip"
Скопируйте вывод этой команды из окна командной строки сюда.

kirillius 03-02-2015 12:47 2465671

C:\Users\username>dir /b /a:-d "C:\Users\username\Desktop\folder_01\*2015.ra
r" "C:\Users\username\Desktop\folder_01\*2015.zip"
21012015.RAR
19012015.ZIP
20012015.ZIP
22012015.ZIP
23012015.ZIP

C:\Users\username>

Iska 03-02-2015 13:22 2465694

kirillius, попробуйте добавить «/i» параметром к «findstr.exe»:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:-d "\\СетевойАдрес\СетеваяПапка1\*2015.rar" "\\СетевойАдрес\СетеваяПапка1\*2015.zip" ^| findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9][0-9]2015.rar$" /c:"^[0-9][0-9][0-9][0-9][0-9]2015.zip$"`
) do "%ProgramFiles%\7-Zip\7z.exe" x "\\СетевойАдрес\СетеваяПапка1\%%~i" -o"\\СетевойАдрес\СетевайПапка2" -r -y

endlocal
exit /b 0


kirillius 03-02-2015 14:14 2465727

Iska, спасибо большое, получилось (локально).
А с сетевыми папками всё-таки не хочет...

Разобрался (в путях были русские символы, из-за этого не работало).

Iska 04-02-2015 08:37 2466083

Цитата:

Цитата kirillius
Разобрался (в путях были русские символы, из-за этого не работало). »

Кодировка пакетного файла должна быть OEM/866.


Время: 11:54.

Время: 11:54.
© OSzone.net 2001-