PDA

Показать полную графическую версию : [решено] Пакетное преобразование данных с помощью cmd


Страниц : [1] 2

Tosyk
12-11-2010, 18:20
ЕСТЬ: файлы с рсширением *.psr, они располагаются в разных папках и являются архивами.

ЕСТЬ: первая программа: psr-tool.exe, которая умеет дампить данные из *.psr в файлы *.tty командой:

psr-tool.exe test-file.psr

на выходе получается *.tty файл, его имя берётся программой из источника test-file.psr и может быть каким угодно.

ЕСТЬ: вторая программа: tty-tool.exe, которая преобразует параметры внутри *.tty файла командой

tty-tool.exe extracted-test01.tty converted-test01.tty -option

и записывает его в новый converted-test01.tty (это имя пишется вручную). extracted-test01.tty - файл источник, "-option" - дополнительные опции.


НУЖНО: чтобы бат-файл дампил программой psr-tool.exe файлы в папку имеющую имя конвертируемого файла:

test-file.psr дампился в test-file!

В папке test-file файлы с расширением *.tty конвертировались бы программой tty-tool.exe и на выходе получались бы файлы *.tty с теми же именами что и были, но уже конвертированные, исходные же *.tty удалялись бы.

Нужно очень, сам не могу предусмотреть и отладить весь процесс, сделать так сказать его универсальным.

Если нужно, я могу более детально описать схему.

NiOl
13-11-2010, 00:51
Честно говоря при простоте задания пришлось перечитать раза 4, пока не понял всех действий... ;)

Запускаете из любого каталога, "батник" сканирует его вглубь по подкаталогам и обрабатывает все найденные *.psr
* полноценно оттестить нет возможности - сначала попробуйте на копиях файлов!

@echo off
set Wrk="%~n0.tmp"
for /f "tokens=1 delims=" %%A in ('dir *.PSR /a-d /b /on /s') do call :UnPack "%%A"
exit
:UnPack
set /p T=UnPacking %1<nul
md "%~dpn1" 2>nul||(echo - Failed!&exit /b)
echo.
cd "%~dpn1"
psr-tool.exe %1
for %%F in (*.tty) do (
tty-tool.exe "%%F" %Wrk% -option ||(echo - Error coverting "%%F"&exit /b)
del /f /q "%%F" >nul 2>nul
ren %Wrk% "%%F" 2>nul
)
exit /b

Tosyk
13-11-2010, 18:39
ООО, как круто! Как быстро, спасибо.

Однако, он не работает.

У меня для теста есть папки: FOLDER01 FOLD02 DIR03

В каждой папке соответственно по одному файлу: file01.psr failo02.psr fille03.psr

Я запускаю скрипт и он создаёт папки (рядом с каждый *.psr файлом) с именами FILE01 FAILO02 FILLE03 и закрывается.

Вот в чём может быть проблема?

El Sanchez
13-11-2010, 20:34
Вот в чём может быть проблема? »
Tosyk, вероятно система не может найти путь к psr-tool.exe и tty-tool.exe.
Вариант №2

@Echo Off
Set Source=C:\Source

For /F "Tokens=*" %%A In ('Dir /B /S "%Source%\*.psr"') Do (
MD "%%~dpnA" 2>nul&&psr-tool.exe "%%A"
For %%B In ("%%~dpA*.tty") Do tty-tool.exe "%%B" "%%~dpB_%%~nxB" -option&&Move /Y "%%~dpB_%%~nxB" "%%~dpnA\%%~nxB"
)

psr-tool.exe и tty-tool.exe должны лежать рядом с батником либо в одном из каталогов системной переменной %PATH%

Tosyk
13-11-2010, 20:41
@Echo Off
Set Source=C:\Source
For /F "Tokens=*" %%A In ('Dir /B /S "%Source%\*.psr"') Do (
MD "%%~dpnA" 2>nul&&psr-tool.exe "%%A"
For %%B In ("%%~dpA*.tty") Do tty-tool.exe "%%B" "%%~dpB_%%~nxB" -option&&Move /Y "%%~dpB_%%~nxB" "%%~dpnA\%%~nxB"
) »
Но ваш вариант мне говорит не найден указаный путь.

меня смущает Set Source=C:\Source, скрипт должен работать из любой папки вглубь по каталогам.

El Sanchez
13-11-2010, 22:08
меня смущает Set Source=C:\Source, скрипт должен работать из любой папки вглубь по каталогам. »
Tosyk, вместо C:\Source пишете свой путь с папками с psr-файлами. С:\Source - это путь для примера

Tosyk
13-11-2010, 22:26
А как быть если я хочу использовать скрипи из любой папки? Ведь я отметил универсальность в первом посте

Anonymоus
14-11-2010, 07:45
Tosyk, В таком случае, вместо Set Source=Абсолютный путь пишете Set Source=.\ (относительный путь), либо Set Source=%CD% (оба примера будут работать с той директорией, откуда был запущен скрипт)

Tosyk
14-11-2010, 08:06
Anonymоus, да действительно происходит дамп tty файлов, но в папку расположения скрипта, а нужно

НУЖНО: чтобы бат-файл дампил программой psr-tool.exe файлы в папку имеющую имя конвертируемого файла:
test-file.psr дампился в test-file!
В папке test-file файлы с расширением *.tty конвертировались бы программой tty-tool.exe и на выходе получались бы файлы *.tty с теми же именами что и были, но уже конвертированные, исходные же *.tty удалялись бы. »

т.е. происходит только

НУЖНО: чтобы бат-файл дампил программой psr-tool.exe файлы в папку »

и дампит он их в папку со скриптом

да, кстати, папки с именами *.psr фалов последним вариантом создаются!

El Sanchez
14-11-2010, 11:47
происходит дамп tty файлов, но в папку расположения скрипта »
Tosyk, значит, что psr-файлы находятся рядом со скриптом.
НУЖНО: чтобы бат-файл дампил программой psr-tool.exe файлы в папку имеющую имя конвертируемого файла »
Tosyk, тогда подробней про синтаксис psr-tool.exe.
Из psr-tool.exe test-file.psr следует, что tty-файл(ы) будет рядом с psr-файлом, я не вижу как указывать выходную директорию для tty-файлов.

Теперь, чтобы было все понятно по скрипту, разбор полетов:

For /F "Tokens=*" %%A In ('Dir /B /S "%Source%\*.psr"') Do - первый цикл ищет psr-файлы в текущем и во вложенных каталогах и поочередно присваивает переменной %A полный путь к найденному psr-файлу (для примера первый найденный файл C:\Source\Dir1\test.psr)
MD "%%~dpnA" 2>nul - модификатор ~dpn выделит из переменной %A все, кроме расширения, т.е. получим имя папки для команды MD (для нашего примера это MD "C:\Source\Dir1\test"). Будет создана папка рядом с psr-файлом.
psr-tool.exe "%%A" - судя по синтаксису распаковываем psr-файл в ту же директорию, где и psr-файл (psr-tool.exe "C:\Source\Dir1\test.psr"). В итоге рядом с psr-файлом, буде(у)т лежать tty-файл(ы) C:\Source\Dir1\test.tty.
For %%B In ("%%~dpA*.tty") Do tty-tool.exe "%%B" "%%~dpB_%%~nxB" -option - второй цикл: все tty-файлы в директории c psr- и распакованным tty-файлами (%%~dpA = C:\Source\Dir1\) прогоняем через утилиту tty-tool.exe (где %%B - путь к найденному tty-файлу C:\Source\Dir1\test.tty, %%~dpB_%%~nxB - временный выходной tty-файл C:\Source\Dir1\_test.tty).
Move /Y "%%~dpB_%%~nxB" "%%~dpnA\%%~nxB" - если конвертация прошла успешно (&&), то переместим временный файл %%~dpB_%%~nxB (C:\Source\Dir1\_test.tty) в ранее созданную папку %%~dpnA (C:\Source\Dir1\test) с переименованием %%~nxB (test.tty), т.е. Move /Y "C:\Source\Dir1\_test.tty" "C:\Source\Dir1\test\test.tty".

Tosyk
14-11-2010, 13:28
El Sanchez, в принципе по разбору полётов всё понятно, и должно работать, но оно не работает.

Я уже писал как тестирую:

У меня для теста есть папки: FOLDER01 FOLD02 DIR03
В каждой папке соответственно по одному файлу: file01.psr failo02.psr fille03.psr»

Плюс рядом с упомянутыми папками у меня лежат программы psr-tool.exe, tty-файлы и собственно сам скрипт

Я запускаю скрипт и он создаёт папки (рядом с каждый *.psr файлом) с именами FILE01 FAILO02 FILLE03 и»

происходит дамп tty файлов, но в папку расположения скрипта »


p.s.: Не думаю, что это важно, но к программе psr-tool.exe прилагается ещё пара библиотек *.dll.

El Sanchez
14-11-2010, 14:06
Плюс рядом с упомянутыми папками у меня лежат программы psr-tool.exe, tty-файлы и собственно сам скрипт »
Tosyk, что за tty-файлы рядом со скриптом? Вы ведь обрабатываете psr-файлы для получения tty-файлов и изначально их не должно существовать, хотя на работу скрипта они не влияют.
происходит дамп tty файлов, но в папку расположения скрипта »
Значит psr-tool.exe распаковывает psr-файлы не в папку с psr-файлом, а в ту, в которой находится сама утилита. Поэтому второй раз пишу
подробней про синтаксис psr-tool.exe. »
Не думаю, что это важно, но к программе psr-tool.exe прилагается ещё пара библиотек *.dll. »
Должны лежать рядом с psr-tool.exe

Tosyk
14-11-2010, 14:23
умеет дампить данные из *.psr в файлы *.tty командой:
psr-tool.exe test-file.psr »

если я правильно понимаю это и есть синтаксис, вот это программа и умеет, больше ничего

El Sanchez
14-11-2010, 14:41
Tosyk, давайте для эксперимента сделаем пробную распаковку. Выполните

psr-tool.exe FOLDER01\file01.psr

и скажите где будут распакованные tty-файлы - в папке FOLDER01 или рядом с psr-tool.exe

Tosyk
14-11-2010, 14:45
Tosyk, давайте для эксперимента сделаем пробную распаковку »
Распаковка произошла в папку с psr-tool.exe

El Sanchez
14-11-2010, 17:03
Tosyk, тогда

@Echo Off
For /F "Tokens=*" %%A In ('Dir /B /S *.psr') Do (
MD "%%~dpnA" 2>nul&&psr-tool.exe "%%A"
For %%B In (*.tty) Do tty-tool.exe "%%B" "%%~dpnA\%%B" -option&&Del /F /Q *.tty 2>nul
)

Tosyk
14-11-2010, 17:10
ООО, вот прогресс!! Правда есть одна незадача.

на выходе получается *.tty файл, его имя берётся программой из источника test-file.psr и может быть каким угодно »

в *.psr файлах бывает несколько *.tty файлов, и скрипт распаковывает их, но преобразовывает только первый из них, а остальные удаляет.

El Sanchez
14-11-2010, 18:35
Tosyk, пардон. Нужны либо скобки:

(For %%B In (*.tty) Do tty-tool.exe "%%B" "%%~dpnA\%%B" -option)&&Del /F /Q *.tty 2>nul

либо перенести команду Del на новую строку:

For %%B In (*.tty) Do tty-tool.exe "%%B" "%%~dpnA\%%B" -option
Del /F /Q *.tty 2>nul

Tosyk
14-11-2010, 18:55
воо, всё отлично! Спасибо огромное!

а как добавить операцию для уже преобразованных *.tty файлов? типа как вот это

For %%B In (*.tty) Do tty-tool.exe "%%B" "%%~dpnA\%%B" -option

но с дальнейшим удалением старых.

NiOl
16-11-2010, 00:29
ООО, как круто! Как быстро, спасибо.
Однако, он не работает. »
- какой неожиданный поворот повествования! ;)

вероятно стоит прописать полный путь к командам psr-tool.exe и tty-tool.exe...
если не поможет - перед командой exit, что в середине скрипта (но не exit /b) поставте команду pause, в первой строке заремируйте команду @Echo off и то, что окажется на экране в результате теста - скопируйте сюда, попробую понять свою ошибку.




© OSzone.net 2001-2012