HA -> ZIP
6 отговора
143 прегледа
HA -> ZIP
Имам към 4-5000 файла (e-books), свалени от руски сайт. Всички са архивирани в любимия на руснаците HA-формат. В разархивиран вид библиотеката е пртекалено голяма, за да се събере на едно CD (както искам да бъде). А ако ги запиша в този формат има друго неудобство, защото не предразполага към лесно четене (трябва да разархивираш и след това да отвориш с някакъв Viewer), така че искам лесно, бързо и _елегантно_ да преархивирам от HA в ZIP. За съжаление Archive Converter и Power Archiver (да не говорим за примерно WinCommander, WinZip и други) не поддържат HA-формата.
Може ли някой да даде идея (само не ми казвайте да използвам BAT-файл от 4-5000 хиляди реда, защото ще ме е срам да призная пред другите, че съм го поравил по този бабешки начин).
Може ли някой да даде идея (само не ми казвайте да използвам BAT-файл от 4-5000 хиляди реда, защото ще ме е срам да призная пред другите, че съм го поравил по този бабешки начин).
Re: HA -> ZIP
Не разбрах с какво ги разархивираш? Имаш ли HA.EXE?
Но може да погледнеш[линк]. Дано ти свърши работа.
В краен случай, ако имаш HA.EXE можеш да си напишеш твой BAT файл (не с 4-5000 реда)
, а с
for %%a in (%1) do call makearh.bat %%a /*примерно hatozip.bat*/
a в arhbat ще имаш нещо от сорта
ha %1 [опции на HA]
pkzip %1 [опции на PKZIP]
като трябва да се съобразиш с директориите (където ще ги разархивираш временно, архивираш, изтриваш, а освен това самите архиви може да имат поддиректории).
Като стартираш hatozip.bat с параметър *.ha, всичко би трябвало да сработи.
За 5000 хиляди файла бих ги пуснал на порции например hatozip a*.ha, hatozip b*.ha.
Успех!
Но може да погледнеш[линк]. Дано ти свърши работа.
В краен случай, ако имаш HA.EXE можеш да си напишеш твой BAT файл (не с 4-5000 реда)
for %%a in (%1) do call makearh.bat %%a /*примерно hatozip.bat*/
a в arhbat ще имаш нещо от сорта
ha %1 [опции на HA]
pkzip %1 [опции на PKZIP]
като трябва да се съобразиш с директориите (където ще ги разархивираш временно, архивираш, изтриваш, а освен това самите архиви може да имат поддиректории).
Като стартираш hatozip.bat с параметър *.ha, всичко би трябвало да сработи.
За 5000 хиляди файла бих ги пуснал на порции например hatozip a*.ha, hatozip b*.ha.
Успех!
Re: HA -> ZIP
Благодаря за съвета. Проблемът е, че това съм го опитвал и по-рано не можах да напиша читав bat-файл.
Ето за какво става дума:
Ако извикам "hatozip *" в променливата 'a' дето прави циъкла, се подават всички файлове (и *.ha включително). При това положение е по-добре цикълът да се модифицира така: for %%a in (%1.ha) do call do.bat %%a. така става по-добре, защото към HA.EXE се подават само *.ha файлове. Но ето го сега проблемът. Нека приемем, че do.bat има вида:
..\ha e %1 *.*
..\pkzip %1 *.*
del *.* /q
(тук съм приел, че всички файлове са в по-горната директория, а аз правя конверсията едно ниво по-надолу - нещо като работна директория).
Та, ето за какво става дума: в горния файл се вижда, че към HA.EXE се подава някакъв файл, примерно 1.ha (това е параметърът 'a', формиран от викащия bat-файл), само че същият параметър се подава и на PKZIP-а, който трябва да направи архива в 1.ha.zip, а това, естествено, никак не му харесва. От друга страна на ниво bat-фоманди няма как да се отредактира този пареметър (1.ha), за да се изтрие файловото разширение (ha) и да се формира името на zip-архивата (PKZIP не иска задължително да се укаже, че ще създаваш архива в 1.zip, стига му и само 1, но в случая това е без значение, понеже задачата е да махнеш от името нещо, а не да добавиш).
Преди време прекарах няколко часа в търсене на възможност да редактирам име на параметър на bat-ниво, но така и не успях. Затова търся направо конвертор.
Между другото, страницата, която ми изпрати е доста интересна (и ти благодаря). На нея има някаква програма FACT.EXE, която прави конверсия, ако разполагаш и с source- и target- архиваторите (което не е проблем). Ще опитам с нея.
А ако ти хрумне решение на горното, свиркай. Ще черпя.
Всичко е възможно, но не всеки може да го направи
Ето за какво става дума:
Ако извикам "hatozip *" в променливата 'a' дето прави циъкла, се подават всички файлове (и *.ha включително). При това положение е по-добре цикълът да се модифицира така: for %%a in (%1.ha) do call do.bat %%a. така става по-добре, защото към HA.EXE се подават само *.ha файлове. Но ето го сега проблемът. Нека приемем, че do.bat има вида:
..\ha e %1 *.*
..\pkzip %1 *.*
del *.* /q
(тук съм приел, че всички файлове са в по-горната директория, а аз правя конверсията едно ниво по-надолу - нещо като работна директория).
Та, ето за какво става дума: в горния файл се вижда, че към HA.EXE се подава някакъв файл, примерно 1.ha (това е параметърът 'a', формиран от викащия bat-файл), само че същият параметър се подава и на PKZIP-а, който трябва да направи архива в 1.ha.zip, а това, естествено, никак не му харесва. От друга страна на ниво bat-фоманди няма как да се отредактира този пареметър (1.ha), за да се изтрие файловото разширение (ha) и да се формира името на zip-архивата (PKZIP не иска задължително да се укаже, че ще създаваш архива в 1.zip, стига му и само 1, но в случая това е без значение, понеже задачата е да махнеш от името нещо, а не да добавиш).
Преди време прекарах няколко часа в търсене на възможност да редактирам име на параметър на bat-ниво, но така и не успях. Затова търся направо конвертор.
Между другото, страницата, която ми изпрати е доста интересна (и ти благодаря). На нея има някаква програма FACT.EXE, която прави конверсия, ако разполагаш и с source- и target- архиваторите (което не е проблем). Ще опитам с нея.
А ако ти хрумне решение на горното, свиркай. Ще черпя.
Всичко е възможно, но не всеки може да го направи
Re: HA -> ZIP
Мдаааааааа, не ми беше минало през главата, но наистина се получава така. За съжаление в момента не се сещам, как би могло да се премахне нещо от променливата. А може и да не става с BAT, щом хората са писали програми за тази цел
.
Дано намериш някой конвертор.
Но ако ми хрумне нещо, ще пиша.
Дано намериш някой конвертор.
Но ако ми хрумне нещо, ще пиша.
Re: HA -> ZIP
При Windows2000 има начини да вземеш каквото си искаш от името на файла. За по-старите версии и DOS не съм сигурен но може да пробвате.
C:\>for /? и четете накрая.
...
...
...
In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
The modifiers can be combined to get compound results:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
%~dp$PATH:i - searches the directories listed in the PATH
environment variable for %I and expands to the
drive letter and path of the first one found.
%~ftzaI - expands %I to a DIR like output line
...
...
Re: HA -> ZIP
Това беше голяма помощ!
В новата версия на DOS-а наистина има полезни подобрения.
За тези, които се интересуват, ето как реших проблема:
В \temp имам всички *.ha файлове (хиляди на брой), PKZIP.EXE, HA.EXE и два bat-файла. Единият се казва: hatozip.bat и съдържа един ред:
for %%a in (*.ha) do call do.bat %%~na
а вторият (както се вижда от call-a) се казва do.bat и представлява:
copy %1.ha tmp
cd tmp
..\ha e %1.ha *.*
..\pkzip -m -x%1.ha ..\%1 *.*
del *.* /q
cd..
(в \temp имам работна под-директория наименована tmp).
Всичко би могло да се опрости още повече, ако HA позволяваше да разархивирам файлове направо в някаква директория (в моя пример tmp), но изглежда това не е възможно (ако беше, нямаше да имам нужда от досадните 'copy' и 'cd').
Това е, благодаря много на dfgdfg.
Half the lies my enemies tell about me are not true
В новата версия на DOS-а наистина има полезни подобрения.
За тези, които се интересуват, ето как реших проблема:
В \temp имам всички *.ha файлове (хиляди на брой), PKZIP.EXE, HA.EXE и два bat-файла. Единият се казва: hatozip.bat и съдържа един ред:
for %%a in (*.ha) do call do.bat %%~na
а вторият (както се вижда от call-a) се казва do.bat и представлява:
copy %1.ha tmp
cd tmp
..\ha e %1.ha *.*
..\pkzip -m -x%1.ha ..\%1 *.*
del *.* /q
cd..
(в \temp имам работна под-директория наименована tmp).
Всичко би могло да се опрости още повече, ако HA позволяваше да разархивирам файлове направо в някаква директория (в моя пример tmp), но изглежда това не е възможно (ако беше, нямаше да имам нужда от досадните 'copy' и 'cd').
Това е, благодаря много на dfgdfg.
Half the lies my enemies tell about me are not true