Показать полную графическую версию : [решено] Пакетное преобразование данных с помощью cmd
ЕСТЬ: файлы с рсширением *.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 удалялись бы.
Нужно очень, сам не могу предусмотреть и отладить весь процесс, сделать так сказать его универсальным.
Если нужно, я могу более детально описать схему.
Честно говоря при простоте задания пришлось перечитать раза 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
ООО, как круто! Как быстро, спасибо.
Однако, он не работает.
У меня для теста есть папки: 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%
@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 - это путь для примера
А как быть если я хочу использовать скрипи из любой папки? Ведь я отметил универсальность в первом посте
Anonymоus
14-11-2010, 07:45
Tosyk, В таком случае, вместо Set Source=Абсолютный путь пишете Set Source=.\ (относительный путь), либо Set Source=%CD% (оба примера будут работать с той директорией, откуда был запущен скрипт)
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".
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
умеет дампить данные из *.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, давайте для эксперимента сделаем пробную распаковку »
Распаковка произошла в папку с 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
)
ООО, вот прогресс!! Правда есть одна незадача.
на выходе получается *.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
воо, всё отлично! Спасибо огромное!
а как добавить операцию для уже преобразованных *.tty файлов? типа как вот это
For %%B In (*.tty) Do tty-tool.exe "%%B" "%%~dpnA\%%B" -option
но с дальнейшим удалением старых.
ООО, как круто! Как быстро, спасибо.
Однако, он не работает. »
- какой неожиданный поворот повествования! ;)
вероятно стоит прописать полный путь к командам psr-tool.exe и tty-tool.exe...
если не поможет - перед командой exit, что в середине скрипта (но не exit /b) поставте команду pause, в первой строке заремируйте команду @Echo off и то, что окажется на экране в результате теста - скопируйте сюда, попробую понять свою ошибку.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC