Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   распаковка файлов в директорию а также вывод сообщения по маске файла (http://forum.oszone.net/showthread.php?t=328111)

romfus 05-07-2017 12:48 2749236

распаковка файлов в директорию а также вывод сообщения по маске файла
 
Имеется скрипт который отвечает за распаковку файлов в директорию а также вывод сообщения по маске файла имени что это за файл и удаления файлов архива. Данный скрипт работал на windows xp. При переходе на windows 7 перестал работать. Перестал работать на моменте где нужно распаковать файл. Почему то он не распаковывает а удаляет его. Если вручную распаковать в нужную директорию то сообщения выводятся. Вот текст этого скрипта.
echo off
if exist z:\f_in\*.arj copy z:\f_in\*.arj c:\Post\Place\
arj x c:\post\place\*.arj c:\post\place\
del c:\post\place\*.p7s
del c:\Post\Place\*.arj
del z:\f_in\*.arj
if exist c:\post\place\*044031*.xml net send "R34Makarova" Њ*ббЁў “аоЇЁ*бЄЁ©
if exist c:\post\place\*044002*.xml net send "R34Makarova" Њ*ббЁў ЃлЄ®ўбЄЁ©
if exist c:\post\place\*044007*.xml net send "R34Makarova" Њ*ббЁў †Ёа*®ўбЄЁ©
if exist c:\post\place\*044018*.xml net send "R34Makarova" Њ*ббЁў ЌЁЄ®«ў*ҐўбЄЁ©
if exist c:\post\place\*044042*.xml net send "R34Makarova" Њ*ббЁў ЉЁа®ўбЄЁ©
if exist c:\post\place\*044025*.xml net send "R34Makarova" Њ*ббЁў ђг¤*п*бЄЁ©

madeinussr 05-07-2017 12:58 2749237

echo off удали, посмотри, что пишет. Мне кажется проблема в строке
Код:

arj x c:\post\place\*.arj c:\post\place\
У тебя arj.exe на семёрке есть то? Он где рядом со скриптом лежит или в Program Files установлен?

Iska 05-07-2017 13:00 2749239

«Вручную» — это как? arj.exe есть? Доступен в PATH? Какова разрядность используемой ОС — «windows 7»?

И код пакетного файла в любом случае надо корректировать.

romfus 05-07-2017 14:20 2749282

пробовал arj ставить не помогло. да именно так, проблема с этой строкой. arj в program files. echo off удаление также не помогало тупо удаляло

megaloman 05-07-2017 14:35 2749286

romfus, команда net send в Windows 7 больше не поддерживается. Как доказательство: net send /? не отработает. Почитайте о команде MSG.
Сто лет не использовал когда-то горячо любимый ARJ. Архиватор работает в командном окне или у него графический интерфейс? Errorlevel он возвращает?

madeinussr 05-07-2017 14:39 2749290

Запусти скрипт из каталога программы arj.exe. Диск z: есть в новой системе? Да, и нет сенд работать не будет в 7.

romfus 05-07-2017 15:26 2749313

я знаю я уже настроил через msg

командное окно

еррорлевелов нет

Iska 05-07-2017 15:35 2749319

Цитата:

Цитата romfus
еррорлевелов нет »

Вообще-то, они как раз должны быть.

Вы на мои вопросы ответите?

megaloman 05-07-2017 16:28 2749338

Вот мой вариант батника
Код:

@Echo Off
Cls

Set "FileIn=z:\f_in\*.rar"
Set "DirOut=Z:\Post\Place"
Set "MsgName=R34Makarova"

Set "Arc=C:\Program Files\WinRAR\Rar.exe"

If Not Exist "%Arc%" (
        Echo Архиватор не найден
        Echo "%Arc%"
        Pause
        GoTo :Eof
)

Pushd "%DirOut%"

If Not %ErrorLevel%==0 (
        Echo Не найдена целевая папка
        Echo "%DirOut%"
        Pause
        GoTo :Eof
)

"%Arc%" x "%FileIn%"
If %ErrorLevel%==0 Del "%FileIn%"

Del "%DirOut%\*.p7s" 2>nul

if Exist *044031*.xml msg "%MsgName%" тра ля ля
if Exist *044002*.xml msg "%MsgName%" тра ля ля
if Exist *044007*.xml msg "%MsgName%" тра ля ля
if Exist *044018*.xml msg "%MsgName%" тра ля ля
if Exist *044042*.xml msg "%MsgName%" тра ля ля
if Exist *044025*.xml msg "%MsgName%" тра ля ля

Popd
GoTo :Eof


У меня не нашлось ни архиватора, ни arj- архива. Моделировал на основе rar.
Пропишите свои файлы архива, вместо *.rar на *.arj
Z:\Post\Place на c:\Post\Place
Вместо Arc=C:\Program Files\WinRAR\Rar.exe путь к Вашему архиватору.
Измените мои строки с сообщениями на нужные Вам.
Не вижу смысла делать копию copy z:\f_in\*.arj c:\Post\Place\ чтобы потом всё это поубивать
del c:\Post\Place\*.arj
del z:\f_in\*.arj
Батник необходимо сохранить в DOS (866) кодировке.

Iska 05-07-2017 16:42 2749347

Цитата:

Цитата megaloman
У меня не нашлось ни архиватора, ни arj- архива. »

olddos - Поиск в Google (конечно, есть ещё и Open-source ARJ).

Цитата:

Цитата megaloman
Вот мой вариант батника »

Я бы ещё увязал удаление с нулевым кодом возврата от архиватора.

megaloman 05-07-2017 17:28 2749365

Iska,
Цитата:

Цитата Iska
Я бы ещё увязал удаление с нулевым кодом возврата от архиватора. »

Виноват! Так и было задумано.В коде строчки переставил. Исправлено. Спасибо.

romfus 14-07-2017 11:46 2751325

проблема решена. Нужно было чтобы скрипт находился рядом с файлом arj.exe, А не подскажите еще как настроить батник так чтобы нужные файлы перекидывались в c:\post\place\ а не нужные удалялись оттуда. То есть если судя по скрипту выше
*044007*.xml "
*044018*.xml "
*044042*.xml
*044025.xml
Данные файлы сохраняются в c:\post\place\ а остальные файлы например 044040.xml 044041.xml и т д удалялись.

или просто дополнить внизу строчкой
if exist c:\post\place\*044040*.xml delete *044040*.xml
if exist c:\post\place\*044041*.xml delete *044041*.xml

romfus 14-07-2017 13:16 2751350

del /f /q C:\Post\Place\*044040*.xml
del /f /q C:\Post\Place\*044041*.xml
Вот по моему работает удаление ненужных файлов

Iska 14-07-2017 14:58 2751384

Цитата:

Цитата romfus
Нужно было чтобы скрипт находился рядом с файлом arj.exe »

Вообще-то этого не требовалось даже во времена DOS.

megaloman 14-07-2017 17:09 2751402

Цитата:

Цитата romfus
чтобы нужные файлы перекидывались в c:\post\place\ а не нужные удалялись оттуда.»

Перекидывались откуда?
Если надо оставить в папке c:\post\place только нужные файлы, вот вариант
Код:

@Echo Off
Set "BoxIn=С:\Post\Place"
Set "Mask=*.*"
Set Spisok="*044007*.xml" "*044018*.xml" "*044042*.xml" "*044025*.xml"
             
Md "%BoxIn%\~%~nx0.tmp" 2>nul

If Exist "%BoxIn%\~%~nx0.tmp" (
        Move /Y "%BoxIn%\%Mask%" "%BoxIn%\~%~nx0.tmp\" >nul 2>nul
        For /R "%BoxIn%\~%~nx0.tmp" %%f IN (%Spisok%) Do Move /Y "%%f" "%BoxIn%\"
        Rd /S /Q "%BoxIn%\~%~nx0.tmp"
)

Что касается
Цитата:

Цитата romfus
Нужно было чтобы скрипт находился рядом с файлом arj.exe »

- то уверен, что это следствие некорректно написанного кода батника. И, на мой взгляд, такой подход неприемлем. Подозреваю, что Вы пытаетесь использовать arj.exe, который система по прописанному пути не находит. Поэтому для arj.exe надо указать полный путь (причём в кавычках, если путь с пробелами), например (я не знаю, где у Вас реально расположен arj):
"C:\Program Files\ARJ\Arj.exe"

romfus 17-07-2017 08:50 2751912

Да я сам не знаю что это за ARJ exe этот файл уже давно существует. На работу устраивался он был. Когда новые пк ставил я просто перенес сам батник и этот arj в одно место и все работало

megaloman, этот код нужно ниже прописать или это как новый скрипт?

Iska 17-07-2017 11:01 2751941

Цитата:

Цитата romfus
Да я сам не знаю что это за ARJ exe »

Наберёте в командной строке arj.exe /? — увидите. И ещё узнаете, что он — Shareware.

megaloman 17-07-2017 14:46 2751989

Iska, Выкачал какой-то ARJ, но он не шароварный. На 30 дней.
Цитата:

Цитата romfus
этот код нужно ниже прописать или это как новый скрипт? »

Это новый скрипт. Вы неделю не реагировали на решение, а я не стал освежать в памяти предыдущую постановку задачи. :)
Вот более интеллектуальное решение, разархивируем не все файлы вподряд, а только те, которые соответствуют списку. При этом ничего лишнего удалять не придётся, так как оно не появится. Специально нашёл arj, так что я уверен, что код рабочий.
Код:

@Echo Off
Cls

Set "FileIn=Z:\f_in\*.arj"
Set "DirOut=Z:\Post\Place"
Set "DelFiles=%DirOut%\*.p7s"

Set Spisok="*044007*.xml" "*044018*.xml" "*044042*.xml" "*044025*.xml"

Set "MsgName=R34Makarova"

Set "Arc=C:\Program Files\ARJ32\arj.exe"

Set "OK=0"

If Not Exist "%FileIn%" Call :Message "Исходные файлы не найдены" "%FileIn%"
If Not Exist "%Arc%" Call :Message "Архиватор не найден" "%Arc%"
Pushd "%DirOut%"|| Call :Message "Не найдена целевая папка" "%DirOut%"

If Not %OK%==0 Pause& GoTo :Eof

Del "%DelFiles%" 2>nul

For %%f In ("%FileIn%") Do "%Arc%" e -y "%%f" %Spisok% &&Del "%%f"
rem "%Arc%" e -y "%FileIn%" %Spisok% &Del "%FileIn%"

For %%f In (%Spisok%) Do msg "%MsgName%" %%f тра ля ля

Popd
pause
GoTo :Eof

:Message
        Set "OK=1"
        Echo:
        Echo %~1
        Echo %~2
GoTo :Eof

Здесь возможны 2 варианта.
То, что прописано сейчас:
For %%f In ("%FileIn%") Do "%Arc%" e -y "%%f" %Spisok% &&Del "%%f"
при успешной работе архиватора удалит исходный arj-файл.
При этом архивы, которые разархивировались неудачно, (например, там не было файлов, соответствующих заданным маскам из списка), останутся нетронутыми.

Или возможен вариант, при котором в любом случае исходные архивы будут удалены. Этот вариант сейчас закомментирован (rem)
rem "%Arc%" e -y "%FileIn%" %Spisok% &Del "%FileIn%"

Выбирать Вам.

Iska 17-07-2017 15:00 2751994

Цитата:

Цитата megaloman
Iska, Выкачал какой-то ARJ, но он не шароварный. На 30 дней. »

Там лицензия внутри есть в LICENSE.DOC.

megaloman 17-07-2017 19:01 2752053

Iska, Не нашёл

Iska 18-07-2017 00:56 2752140

Прямую ссылку тут давать не комильфо, так что так: old dos arj - Поиск в Google, первая же ссылка. Смотрите в тех, что потолще — там инсталляция (arj sfx, конечно), и там будет LICENSE.DOC или, в более свежих, LICENSE.TXT.


Время: 08:09.

Время: 08:09.
© OSzone.net 2001-