Показать полную графическую версию : [решено] Поиск и распаковка архивов по маске
kirillius
03-02-2015, 11:11
Здравствуйте.
Задача такая: в сетевой папке найти архивы 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, и чтобы это были именно цифры.
Можно ли такое реализовать, и как?
с определённым количеством символов до 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
Принцип понятен? »
Как отобрать вроде понял, но как потом начать распаковку этих архивов?
Как-то так (не проверялось):
@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
Как-то так (не проверялось): »
Проверил на локальных папках - что-то не получилось...
@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
Запустите командную строку. Вставьте в неё команду:
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
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>
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
Iska, спасибо большое, получилось (локально).
А с сетевыми папками всё-таки не хочет...
Разобрался (в путях были русские символы, из-за этого не работало).
Разобрался (в путях были русские символы, из-за этого не работало). »
Кодировка пакетного файла должна быть OEM/866.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.