PDA

Показать полную графическую версию : распаковка файлов в директорию а также вывод сообщения по маске файла


Страниц : [1] 2

romfus
05-07-2017, 12:48
Имеется скрипт который отвечает за распаковку файлов в директорию а также вывод сообщения по маске файла имени что это за файл и удаления файлов архива. Данный скрипт работал на 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
echo off удали, посмотри, что пишет. Мне кажется проблема в строке arj x c:\post\place\*.arj c:\post\place\ У тебя arj.exe на семёрке есть то? Он где рядом со скриптом лежит или в Program Files установлен?

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

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

romfus
05-07-2017, 14:20
пробовал arj ставить не помогло. да именно так, проблема с этой строкой. arj в program files. echo off удаление также не помогало тупо удаляло

megaloman
05-07-2017, 14:35
romfus, команда net send в Windows 7 больше не поддерживается. Как доказательство: net send /? не отработает. Почитайте о команде MSG. (http://ab57.ru/cmdlist/msg.html)
Сто лет не использовал когда-то горячо любимый ARJ. Архиватор работает в командном окне или у него графический интерфейс? Errorlevel он возвращает?

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

romfus
05-07-2017, 15:26
я знаю я уже настроил через msg

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

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

Iska
05-07-2017, 15:35
еррорлевелов нет »
Вообще-то, они как раз должны быть.

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

megaloman
05-07-2017, 16:28
@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
У меня не нашлось ни архиватора, ни arj- архива. »
olddos - Поиск в Google (https://www.google.com/search?q=olddos) (конечно, есть ещё и Open-source ARJ (http://arj.sourceforge.net/)).

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

megaloman
05-07-2017, 17:28
Iska, Я бы ещё увязал удаление с нулевым кодом возврата от архиватора. »
Виноват! Так и было задумано.В коде строчки переставил. Исправлено. Спасибо.

romfus
14-07-2017, 11:46
проблема решена. Нужно было чтобы скрипт находился рядом с файлом 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
del /f /q C:\Post\Place\*044040*.xml
del /f /q C:\Post\Place\*044041*.xml
Вот по моему работает удаление ненужных файлов

Iska
14-07-2017, 14:58
Нужно было чтобы скрипт находился рядом с файлом arj.exe »
Вообще-то этого не требовалось даже во времена DOS.

megaloman
14-07-2017, 17:09
чтобы нужные файлы перекидывались в 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"
)Что касается Нужно было чтобы скрипт находился рядом с файлом arj.exe » - то уверен, что это следствие некорректно написанного кода батника. И, на мой взгляд, такой подход неприемлем. Подозреваю, что Вы пытаетесь использовать arj.exe, который система по прописанному пути не находит. Поэтому для arj.exe надо указать полный путь (причём в кавычках, если путь с пробелами), например (я не знаю, где у Вас реально расположен arj):
"C:\Program Files\ARJ\Arj.exe"

romfus
17-07-2017, 08:50
Да я сам не знаю что это за ARJ exe этот файл уже давно существует. На работу устраивался он был. Когда новые пк ставил я просто перенес сам батник и этот arj в одно место и все работало

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

Iska
17-07-2017, 11:01
Да я сам не знаю что это за ARJ exe »
Наберёте в командной строке arj.exe /? — увидите. И ещё узнаете, что он — Shareware.

megaloman
17-07-2017, 14:46
Iska, Выкачал какой-то ARJ, но он не шароварный. На 30 дней.
этот код нужно ниже прописать или это как новый скрипт? » Это новый скрипт. Вы неделю не реагировали на решение, а я не стал освежать в памяти предыдущую постановку задачи. :)
Вот более интеллектуальное решение, разархивируем не все файлы вподряд, а только те, которые соответствуют списку. При этом ничего лишнего удалять не придётся, так как оно не появится. Специально нашёл 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
Iska, Выкачал какой-то ARJ, но он не шароварный. На 30 дней. »
Там лицензия внутри есть в LICENSE.DOC.

megaloman
17-07-2017, 19:01
Iska, Не нашёл




© OSzone.net 2001-2012