Поиск и распаковка архивов по маске
Здравствуйте.
Задача такая: в сетевой папке найти архивы 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, и чтобы это были именно цифры.
Можно ли такое реализовать, и как?
|
Цитата:
Цитата 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». Принцип понятен?
|
Как отобрать вроде понял, но как потом начать распаковку этих архивов?
|
Как-то так (не проверялось):
Код:
@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
|
Цитата:
Цитата 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
|
Запустите командную строку. Вставьте в неё команду:
Код:
dir /b /a:-d "C:\Users\username\Desktop\folder_01\*2015.rar" "C:\Users\username\Desktop\folder_01\*2015.zip"
Скопируйте вывод этой команды из окна командной строки сюда.
|
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
|
Iska, спасибо большое, получилось (локально).
А с сетевыми папками всё-таки не хочет...
Разобрался (в путях были русские символы, из-за этого не работало).
|
Цитата:
Цитата kirillius
Разобрался (в путях были русские символы, из-за этого не работало). »
|
Кодировка пакетного файла должна быть OEM/866.
|
Время: 11:54.
© OSzone.net 2001-