 |
|
Пакетное преобразование данных с помощью 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 1542003 |
Цитата:
Цитата Tosyk
Вот в чём может быть проблема? »
|
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%
|
Цитата:
Цитата El Sanchez
@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 1542101 |
Цитата:
Цитата Tosyk
меня смущает Set Source=C:\Source, скрипт должен работать из любой папки вглубь по каталогам. »
|
Tosyk, вместо C:\Source пишете свой путь с папками с psr-файлами. С:\Source - это путь для примера
|
А как быть если я хочу использовать скрипи из любой папки? Ведь я отметил универсальность в первом посте
|
Tosyk, В таком случае, вместо Set Source=Абсолютный путь пишете Set Source=.\ (относительный путь), либо Set Source=%CD% (оба примера будут работать с той директорией, откуда был запущен скрипт)
|
Anonymоus, да действительно происходит дамп tty файлов, но в папку расположения скрипта, а нужно
Цитата:
Цитата Tosyk
НУЖНО: чтобы бат-файл дампил программой psr-tool.exe файлы в папку имеющую имя конвертируемого файла:
test-file.psr дампился в test-file!
В папке test-file файлы с расширением *.tty конвертировались бы программой tty-tool.exe и на выходе получались бы файлы *.tty с теми же именами что и были, но уже конвертированные, исходные же *.tty удалялись бы. »
|
т.е. происходит только
Цитата:
Цитата Tosyk
НУЖНО: чтобы бат-файл дампил программой psr-tool.exe файлы в папку »
|
и дампит он их в папку со скриптом
да, кстати, папки с именами *.psr фалов последним вариантом создаются!
|
El Sanchez |
14-11-2010 11:47 1542351 |
Цитата:
Цитата Tosyk
происходит дамп tty файлов, но в папку расположения скрипта »
|
Tosyk, значит, что psr-файлы находятся рядом со скриптом.
Цитата:
Цитата Tosyk
НУЖНО: чтобы бат-файл дампил программой 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, в принципе по разбору полётов всё понятно, и должно работать, но оно не работает.
Я уже писал как тестирую:
Цитата:
Цитата Tosyk
У меня для теста есть папки: FOLDER01 FOLD02 DIR03
В каждой папке соответственно по одному файлу: file01.psr failo02.psr fille03.psr »
|
Плюс рядом с упомянутыми папками у меня лежат программы psr-tool.exe, tty-файлы и собственно сам скрипт
Цитата:
Цитата Tosyk
Я запускаю скрипт и он создаёт папки (рядом с каждый *.psr файлом) с именами FILE01 FAILO02 FILLE03 и »
|
Цитата:
Цитата Tosyk
происходит дамп tty файлов, но в папку расположения скрипта »
|
p.s.: Не думаю, что это важно, но к программе psr-tool.exe прилагается ещё пара библиотек *.dll.
|
El Sanchez |
14-11-2010 14:06 1542421 |
Цитата:
Цитата Tosyk
Плюс рядом с упомянутыми папками у меня лежат программы psr-tool.exe, tty-файлы и собственно сам скрипт »
|
Tosyk, что за tty-файлы рядом со скриптом? Вы ведь обрабатываете psr-файлы для получения tty-файлов и изначально их не должно существовать, хотя на работу скрипта они не влияют.
Цитата:
Цитата Tosyk
происходит дамп tty файлов, но в папку расположения скрипта »
|
Значит psr-tool.exe распаковывает psr-файлы не в папку с psr-файлом, а в ту, в которой находится сама утилита. Поэтому второй раз пишу
Цитата:
Цитата El Sanchez
подробней про синтаксис psr-tool.exe. »
|
Цитата:
Цитата Tosyk
Не думаю, что это важно, но к программе psr-tool.exe прилагается ещё пара библиотек *.dll. »
|
Должны лежать рядом с psr-tool.exe
|
Цитата:
Цитата Tosyk
умеет дампить данные из *.psr в файлы *.tty командой:
psr-tool.exe test-file.psr »
|
если я правильно понимаю это и есть синтаксис, вот это программа и умеет, больше ничего
|
El Sanchez |
14-11-2010 14:41 1542451 |
Tosyk, давайте для эксперимента сделаем пробную распаковку. Выполните
Код:
psr-tool.exe FOLDER01\file01.psr
и скажите где будут распакованные tty-файлы - в папке FOLDER01 или рядом с psr-tool.exe
|
Цитата:
Цитата El Sanchez
Tosyk, давайте для эксперимента сделаем пробную распаковку »
|
Распаковка произошла в папку с psr-tool.exe
|
El Sanchez |
14-11-2010 17:03 1542523 |
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
на выходе получается *.tty файл, его имя берётся программой из источника test-file.psr и может быть каким угодно »
|
в *.psr файлах бывает несколько *.tty файлов, и скрипт распаковывает их, но преобразовывает только первый из них, а остальные удаляет.
|
El Sanchez |
14-11-2010 18:35 1542574 |
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
но с дальнейшим удалением старых.
|
Цитата:
Цитата Tosyk
ООО, как круто! Как быстро, спасибо.
Однако, он не работает. »
|
- какой неожиданный поворот повествования! ;)
вероятно стоит прописать полный путь к командам psr-tool.exe и tty-tool.exe...
если не поможет - перед командой exit, что в середине скрипта (но не exit /b) поставте команду pause, в первой строке заремируйте команду @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
psr-extractor.exe -e ""%%~dpnA"" "%%A"
)
For /F "Tokens=*" %%D In ('Dir /B /S *.bin') Do (del %%D)
For /F "Tokens=*" %%C In ('Dir /B /S *.xml') Do (del %%C)
For /F "Tokens=*" %%F In ('Dir /B /S *.fsb') Do (del %%F)
Вот по такой схеме всё работает, я добавил ещё один инструмент, он распаковывает *.psr файлы полностью (psr-tool.exe дампит только определённый файл - *.tty)
Код:
psr-extractor.exe -e ""%%~dpnA"" "%%A"
psr-extractor.exe работает так:
psr-extractor.exe -e <"путь для извлечения"> <сам файл *.psr>
Код:
For /F "Tokens=*" %%D In ('Dir /B /S *.bin') Do (del %%D)
For /F "Tokens=*" %%C In ('Dir /B /S *.xml') Do (del %%C)
For /F "Tokens=*" %%F In ('Dir /B /S *.fsb') Do (del %%F)
Вроде как сделал, чтобы этими командами удалялись лишние файлы после распаковки программой psr-extractor.exe. Вроде работает.
Но есть проблема: если в пути есть пробелы, то psr-extractor.exe не работает.
Как это можно исправить?
|
El Sanchez |
26-11-2010 14:02 1552078 |
Цитата:
Цитата Tosyk
For /F "Tokens=*" %%D In ('Dir /B /S *.bin') Do (del %%D)
For /F "Tokens=*" %%C In ('Dir /B /S *.xml') Do (del %%C)
For /F "Tokens=*" %%F In ('Dir /B /S *.fsb') Do (del %%F) »
|
Tosyk, это все можно заменить на:
Код:
Del /S /F /Q *.bin *.xml *.fsb 2>nul
Цитата:
Цитата Tosyk
Но есть проблема: если в пути есть пробелы, то psr-extractor.exe не работает »
|
Вместо
Цитата:
Цитата Tosyk
psr-extractor.exe -e ""%%~dpnA "" "%%A" »
|
нужно
Код:
psr-extractor.exe -e "%%~dpnA" "%%A"
, т.е. не удваивайте двойные кавычки
|
Цитата:
Цитата El Sanchez
, т.е. не удваивайте двойные кавычки »
|
А я пробЫвал, но та же история! Файлы не распаковываются.
ДОБАВКА:
Причём если делать через командную строку (но не использовать полные пути) то всё работает даже если программа запускается с рабочего стола.
|
Время: 10:32.
© OSzone.net 2001-