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

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

Sarge81 16-09-2010 08:15 1496437

Конвертирование файлов с сохранением структуры каталогов
 
Итак, дано:
1) Программа-конвертер с синтаксисом (упрощенно):
Код:

converter input_file output_file
2) Структура папок с входными файлами (может быть произвольной), например:
Код:

C:\in\file1.ext1
C:\in\DIR1\file2.ext1
C:\in\DIR1\DIR2\file3.ext1
C:\in\DIR3\file4.ext1
C:\in\DIR3\file5.ext1

Требуется - конвертировать файлы в другой формат и положить их, например, в папку D:\out с сохранением структуры каталогов, т.е.:
Код:

D:\out\file1.ext2
D:\out\DIR1\file2.ext2
D:\out\DIR1\DIR2\file3.ext2
D:\out\DIR3\file4.ext2
D:\out\DIR3\file5.ext2

Все на что хватило знаний (ну не силен я в командных файлах :():
Цитата:

for /r c:\in\ %%i in (*.ext1) do (if not exist d:\out%%~pi md d:\out%%~pi & C:\converter %%i d:\out%%~pi\%%~ni.ext2)
В результате получается:
Код:

D:\out\in\file1.ext2
D:\out\in\\DIR1\file2.ext2
D:\out\in\DIR1\DIR2\file3.ext2
D:\out\in\DIR3\file4.ext2
D:\out\in\DIR3\file5.ext2

Если бы были команды поиска подстроки в строке, задача решилась бы элементарно... а так даже не знаю с какой стороны подойти. Помогите, пожалуйста, с написанием нужного скрипта. :mellow:

amel27 16-09-2010 09:12 1496479

Код:

@echo off

set dri=c:\in
set dro=d:\out
set ex1=ext1
set ex2=ext2

xcopy "%dri%\*" "%dro%\" /T
for /r "%dri%" %%i in (*.%ex1%) do (
 set "out_p=%%~dpni"
 call set "out_p=%%out_p:%dri%=%dro%%%"
 call converter "%%i" "%%out_p%%.%ex2%"
)


Sarge81 17-09-2010 06:55 1497376

amel27, спасибо, выручили! :) Правда так и не въехал что делает команда
Цитата:

call set "out_p=%%out_p:%dri%=%dro%%%"
Точнее понятно какое в результате присваивается значение переменной out_p, но вот как оно работает (виндовский хэлп ответа на э
тот вопрос не дает)? :o

amel27 17-09-2010 07:12 1497382

Цитата:

Цитата Sarge81
не въехал что делает команда »

то же самое, но по справке:
Код:

@echo off
setlocal enabledelayedexpansion

set dri=c:\in
set dro=d:\out
set ex1=ext1
set ex2=ext2

xcopy "%dri%\*" "%dro%\" /T
for /r "%dri%" %%i in (*.%ex1%) do (
 set "out_p=%%~dpni"
 set "out_p=!out_p:%dri%=%dro%!"
 converter "%%i" "!out_p!.%ex2%"
)



Время: 19:47.

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