PDA

Показать полную графическую версию : Поиск и копирование заданных в параметре скрипта файлов


miraxgroup
19-08-2014, 21:06
Прошу помощи (как и все здесь присутствующие).
Есть папка с подпапками, условный статичный путь “C:\АЛФАВИТ\”, содержит она подпапки и файлы с различным расширением вида :
А\10001,10002,10003-0.jpg
А\10001,10002,10003-1.jpg
Б\20001,20002,20003-0.jpg
Б\20001,20002,20003-1.jpg
В\30001,30002,30003-0.jpg
В\30001,30002,30003-1.jpg
И.т.д.
Необходимо : рекурсивно (пробегаясь по подпапкам), батником, скопировать определенные файлы с помощью параметра в батнике (поиск в имени файла) с разделителем (пусть будет “|”) в определенную папку (заданную так же параметром). Условное исполнение:

Script.bat 20002|30003 C:\РЕЗУЛЬТАТЫ\ПМ-00001\

Результат выполнения: в заданной в параметре папке C:\РЕЗУЛЬТАТЫ\ПМ-00001\
Появятся скопированные файлы :
20001,20002,20003-0.jpg
20001,20002,20003-1.jpg
30001,30002,30003-0.jpg
30001,30002,30003-1.jpg

Заранее благодарен!

Iska
20-08-2014, 00:07
пусть будет “|” »
Не будет. Этот спецсимвол имеет вполне определённый смысл для интерпретатора команд пакетных файлов.

@echo off
setlocal enableextensions enabledelayedexpansion

set sDestFolder=%~1
set sTemplate=%~2

if not defined sDestFolder (
echo Not defined destination folder.
call :Usage
exit /b 1
)

if not defined sTemplate (
echo Not defined template for find.
call :Usage
exit /b 2
)

if not exist "%sDestFolder%\." (
echo Can't find destination folder [%sDestFolder%].
exit /b 3
)

:Repeat
for /f "usebackq delims=" %%i in (
`dir /b /s /a:-d "C:\АЛФАВИТ\*.*" 2^>nul ^| findstr.exe /i /r /c:"%sTemplate%"`
) do >nul copy "%%~i" "%sDestFolder%\"

shift /2
set sTemplate=%~2
if defined sTemplate goto :Repeat

endlocal
exit /b 0

:Usage
echo Usage: %~0 ^<Destination folder^> ^<Template^> [^<Template^> ...]
exit /b 0

Вызов пакетного файла — сначала результирующая папка, затем шаблоны для команды «findstr.exe». Для Вашего примера:
Script.cmd "C:\РЕЗУЛЬТАТЫ\ПМ-00001" 20002 30003




© OSzone.net 2001-2012