Показать полную графическую версию : распаковка файлов в директорию а также вывод сообщения по маске файла
Имеется скрипт который отвечает за распаковку файлов в директорию а также вывод сообщения по маске файла имени что это за файл и удаления файлов архива. Данный скрипт работал на 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 установлен?
«Вручную» — это как? arj.exe есть? Доступен в PATH? Какова разрядность используемой ОС — «windows 7»?
И код пакетного файла в любом случае надо корректировать.
пробовал 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.
я знаю я уже настроил через msg
командное окно
еррорлевелов нет
еррорлевелов нет »
Вообще-то, они как раз должны быть.
Вы на мои вопросы ответите?
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) кодировке.
У меня не нашлось ни архиватора, ни arj- архива. »
olddos - Поиск в Google (https://www.google.com/search?q=olddos) (конечно, есть ещё и Open-source ARJ (http://arj.sourceforge.net/)).
Вот мой вариант батника »
Я бы ещё увязал удаление с нулевым кодом возврата от архиватора.
megaloman
05-07-2017, 17:28
Iska, Я бы ещё увязал удаление с нулевым кодом возврата от архиватора. »
Виноват! Так и было задумано.В коде строчки переставил. Исправлено. Спасибо.
проблема решена. Нужно было чтобы скрипт находился рядом с файлом 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
del /f /q C:\Post\Place\*044040*.xml
del /f /q C:\Post\Place\*044041*.xml
Вот по моему работает удаление ненужных файлов
Нужно было чтобы скрипт находился рядом с файлом 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"
Да я сам не знаю что это за ARJ exe этот файл уже давно существует. На работу устраивался он был. Когда новые пк ставил я просто перенес сам батник и этот arj в одно место и все работало
megaloman, этот код нужно ниже прописать или это как новый скрипт?
Да я сам не знаю что это за 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, Выкачал какой-то ARJ, но он не шароварный. На 30 дней. »
Там лицензия внутри есть в LICENSE.DOC.
megaloman
17-07-2017, 19:01
Iska, Не нашёл
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.