Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Пакетное преобразование данных с помощью cmd

Ответить
Настройки темы
CMD/BAT - [решено] Пакетное преобразование данных с помощью cmd

Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


ЕСТЬ: файлы с рсширением *.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 удалялись бы.

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

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

Отправлено: 18:20, 12-11-2010

 

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Честно говоря при простоте задания пришлось перечитать раза 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

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:51, 13-11-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


ООО, как круто! Как быстро, спасибо.

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

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

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

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

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

Отправлено: 18:39, 13-11-2010 | #3


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата 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%

Отправлено: 20:34, 13-11-2010 | #4


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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, скрипт должен работать из любой папки вглубь по каталогам.

Отправлено: 20:41, 13-11-2010 | #5


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:08, 13-11-2010 | #6


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


А как быть если я хочу использовать скрипи из любой папки? Ведь я отметил универсальность в первом посте

Отправлено: 22:26, 13-11-2010 | #7


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


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

Отправлено: 07:45, 14-11-2010 | #8


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 фалов последним вариантом создаются!

Отправлено: 08:06, 14-11-2010 | #9


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата 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".
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:47, 14-11-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Пакетное преобразование данных с помощью cmd

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - Преобразование данных в Exel '2010 - ? Gowdin Microsoft Office (Word, Excel, Outlook и т.д.) 7 28-10-2010 17:27
CMD/BAT - Написание логов с помощью BAT | CMD registeruser1 Скриптовые языки администрирования Windows 8 22-05-2010 19:57
Доступ - [решено] Смена пароля с помощью cmd censored Microsoft Windows 2000/XP 2 25-11-2008 17:36
Решено | Управление с помощью cmd Traktorist Microsoft Windows 2000/XP 2 04-05-2006 17:14
Excel. не работает преобразование типов данных. deni5 Программирование и базы данных 2 26-01-2004 21:55




 
Переход