Войти

Показать полную графическую версию : [решено] копировать с CD файлы *.rar на жёсткий диск в одну и ту же папку (ММ.ДД-ДД)


PupsIC
05-09-2007, 11:34
По роду деятельности приходится постоянно копировать с CD файлы *.rar на жёсткий диск в одну и ту же папку.
Сложность в том, что на CD постоянно меняется имя папки (в формате ММ.ДД-ДД), а именно:
E:\t3000\08.27-02\*.rar
E:\t3000\08.20-26\*.rar
E:\t3000\08.13-19\*.rar и т.д и т.п.
Можно ли это как-то преодолеть, ибо батник значительно облегчил бы жизнь......
Был бы рад конкретному решению, если это в принципе возможно......

ShaddyR
05-09-2007, 13:27
можно.. отчего ж нельзя?
Примем константой имя CD - например, Е:
Тогда:
!run.bat
@echo off
cls
set cdd=e:
for /f "usebackq delims==" %%i in (`"dir "%cdd%" /ad /b"`) do call work.bat "%%i"
echo Ok
pause

work.bat
@echo off
set CDD=E:
set BAK_DIR=D:\back\CD
IF EXIST "%cdd%\%1"\*.rar goto work
echo Skipped: %1
goto exit
:work
echo --} Processing folder "%1"
MD %BAK_DIR%\%1
xcopy "%cdd%\%1"\*.rar "%BAK_DIR%\%1"\*.rar /q /h
echo {-- Ready: "%1"

:exit

Общий смысл какой: берется список папок с диска Е:, делается перебор их. В процессе перебора в папке, указанной в переменной BAK_DIR создается папка с тем же именем, что и на диске и копируются все файлы с расширением .rar. Папки, не содержащие в корне ни одного rar-a пропускаются. На экран выводится отчет - какие папки обработаны, какие пропущены и сколько файлов скопировано.
Если изменить команду копирования следующим образом, копироваться будут файлы, находящиеся во вложенных папках (при условии, что в корневой был хоть один rar):
xcopy "%cdd%\%1"\*.exe "%BAK_DIR%\%1"\*.exe /q /h /e

PupsIC
05-09-2007, 16:41
Спасибо за практический совет (редкость в наше время). Обязательно попробую и завтра напишу, что получилось!

PupsIC
05-09-2007, 19:07
Попробовал, батники работают наполовину: ищет только в первых папках, а надо во вложенных.
Посему уточняю:

Папки ВСЕГДА лежат ВНУТРИ каталога E:\t3000 ,например:
E:\t3000\08.27-02\*.rar
E:\t3000\09.01-21\*.rar
Все файлы *.rar надо ОДНОЙ кучей сложить РОССЫПЬЮ (без подпапок) в С:\Storage\Archive\*.rar

Чувствую, что это можно заставить работать в моём конкретном случае (после доработки). Только как?

Busla
06-09-2007, 13:48
это можно вообще одной командой:
for /D %i in (E:\t3000\*) do copy %i\*.rar С:\Storage\Archive\
хотя вместо copy лучше использовать xcopy с ключом /D чтобы одни и те же файлы поверх не переписывал

PupsIC
06-09-2007, 15:12
Спасибо Busla !!!! После исправления незначительных ошибок окончательный рабочий вариант выглядит так:

for /D %%i in (E:\t3000\*) do copy %%i\*.rar С:\Storage\Archive\


Всем огромное спасибо!!!!!

Coutty
06-09-2007, 16:09
(А вообще - так ли надо это автоматизировать? Может быть просто сделать поиск по *.rar и скопировать все файлы толпой?)

ShaddyR
06-09-2007, 20:19
PupsIC, ю а велкам. (с) Timsky

Busla
08-09-2007, 17:10
После исправления незначительных ошибок »
это не незначительная ошибка, а немножко разный синтаксис для непосредственного запуска из командной строки и командного файла - чтобы параметры файла не путались с параметром for.




© OSzone.net 2001-2012