Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] копировать с CD файлы *.rar на жёсткий диск в одну и ту же папку (ММ.ДД-ДД) (http://forum.oszone.net/showthread.php?t=89709)

PupsIC 05-09-2007 11:34 638492

[решено] копировать с CD файлы *.rar на жёсткий диск в одну и ту же папку (ММ.ДД-ДД)
 
По роду деятельности приходится постоянно копировать с 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 638553

можно.. отчего ж нельзя?
Примем константой имя 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 638686

Спасибо за практический совет (редкость в наше время). Обязательно попробую и завтра напишу, что получилось!

PupsIC 05-09-2007 19:07 638759

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

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

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

Busla 06-09-2007 13:48 639175

это можно вообще одной командой:
Код:

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

PupsIC 06-09-2007 15:12 639209

Спасибо Busla !!!! После исправления незначительных ошибок окончательный рабочий вариант выглядит так:

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


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

Coutty 06-09-2007 16:09 639238

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

ShaddyR 06-09-2007 20:19 639333

PupsIC, ю а велкам. (с) Timsky

Busla 08-09-2007 17:10 640171

Цитата:

Цитата PupsIC
После исправления незначительных ошибок »

это не незначительная ошибка, а немножко разный синтаксис для непосредственного запуска из командной строки и командного файла - чтобы параметры файла не путались с параметром for.


Время: 20:20.

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