Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 2

Автор: igor_andreev
Дата сообщения: 09.02.2007 07:01

Цитата:
средствами виндоус (хотябы XP) скачать файл с сети (http и ftp хотябы)?

Vbscript-ом можно и с http и с ftp
З.Ы. Но не рекомендую Для скачивания бинарных данных сторонние проги не зря делают.
Автор: miheenko
Дата сообщения: 09.02.2007 07:29
Доброго всем дня. Помогите пожалуйста.
Есть такая задача. У меня вот такой батник внем все супер, но единственная загвоздка, в следующем, известно все кроме названия начального файла, он лежит по пути d:\bat\***.*** Необходимо определить его название и вставить в батник. Начальный файл в папке один. Т.е. можно при помощи Dir как то.



@Echo off
del end.txt
setlocal enabledelayedexpansion
for /F "skip=9 tokens=5,*" %%i in (d:\bat\***.***) do echo %%i | find ""|| echo %%i%%j >> bat1.txt
set "count=1"
for /f "tokens=*" %%a in (bat1.txt) do (
if !count!==1 echo тел;Контролировалось: %%a
if !count!==3 echo Отправлено: %%a
set /a "count+=1"
)>>bat2.txt
del bat1.txt
set "count=1"
for /f "tokens=1-10" %%a in (bat2.txt) do (
if !count!==1 (set fpart=%%a%%b%%c%%d) else (set code=%%a%%b%%c%%d)
set /a count=!count!+1
)
if not defined fpart (echo %code%>end.txt) else (echo %fpart% %code%>>end.txt)
del bat2.txt
Автор: AZJIO
Дата сообщения: 09.02.2007 08:04
Я вот так использую:
Комстрока перезагрузки
C:\windows\system32\shutdown.exe -r -t 00 -f
Комстрока выключения компа
C:\windows\system32\shutdown.exe -s -t 00 -f

Интересные вопросы решались последние несколько дней... показ расширения у меня работает, правда глюковато, иногда несрабатывает, или срабатывает по F5, но не во всех папках (жму в каждом окне). Перезапуск эксплорера у меня не срабатывает, только убивается. Скрипт для обновления рабочего стола (не для папок) срабатывает, если и на панели задач сработает, то это для меня главное - обновить для показа панели инструментов.
Осталось ещё "последняя" проблема - создание папки... неважно где задействуется, строка в bat-файле или в реестре, чтоб потом этому делу назначить горячую клавишу, а то двухярусное контекстное меню утомляет.
Спасибо за ссылки на справку, также скачал "autoit", конечно зря, потому как для меня это тёмный лес. И хочется упомянуть прогу "InqSoft Sign 0f Misery", там справка на русском языке, лёгкая в понимании, и есть всякие эмуляции клавишных нажатий, с задержкой можно, и классы окон определяет, и компилирует созданный скрипт в *.exe.
Автор: miheenko
Дата сообщения: 09.02.2007 08:07
Всем спасибо. Уменя получилось.


@Echo off
del end.txt
setlocal enabledelayedexpansion
dir /B echo d:\bat\*.* >> d:\bat1\file.txt
for /f %%s in (d:\bat1\file.txt) do set "text1=!text! %%s"
echo %text1:~1%
for /F "skip=9 tokens=5,*" %%i in (d:\bat\%text1:~1%) do echo %%i | find ""|| echo %%i%%j >> bat1.txt
set "count=1"
for /f "tokens=*" %%a in (d:\bat1\bat1.txt) do (
if !count!==1 echo Тел.;Љ®-ва®«Ёа®ў «®бм:_%%a
if !count!==2 echo ЋвЎа Є®ў -®:_%%a
if !count!==3 echo ЋвЇа ў«Ґ-®:_%%a
set /a "count+=1"
)>>d:\bat1\bat2.txt
del d:\bat1\file.txt
del d:\bat1\bat1.txt
for /f %%a in (d:\bat1\bat2.txt) do set "text=!text! %%a"
echo %text:~1%>>d:\bat1\end.txt
del d:\bat1\bat2.txt


Автор: JohnRD
Дата сообщения: 09.02.2007 12:42
Elroir спасибо
видимо я не успел опробовать старый.

попробовал добавить в код переименование обработанных архивов, но в следующий раз батник их все равно хватает и каждый раз добавляет еще подчерк 1.zip___

Код: @echo off
for %%a in (*.zip) do (
md %%~na 2>nul
unzip %%a -d %%~na
rename %%a %%a_
)
Автор: Elroir
Дата сообщения: 09.02.2007 14:05
JohnRD

Цитата:
как можно решить такую вешь

Наверно так:

Код:
@echo off
for %%a in (*.zip) do if "%%~xa"==".zip" (
md %%~na 2>nul
unzip %%a -d %%~na
rename %%a %%a_
)
Автор: AZJIO
Дата сообщения: 09.02.2007 16:27
Ещё раз впишу, скопировал с батника...


Цитата:
@echo off
chcp 1251>nul
setlocal enabledelayedexpansion
for /f "usebackq tokens=8*" %%a in (`"cmdow /t /f | find /i "explorer""`) do (
if /i "%%a"=="explorer" set "open_windows=!open_windows! "%%b""
)
taskkill /f /im explorer.exe>nul
for %%a in (%open_windows%) do start /min explorer %%a


Вот это запускаю, и панель задач не появляется, то есть експлорер не запустился.
Да и ещё... у меня тоже после сегодняшних экспериментов все настройки експлорера сбросились по умолчанию (после перезагрузки), но потом обнаружил, что я вошёл в систему как новый пользователь, при чём старый профиль не работает. Удалил оба профиля из под liveCD, и скопировал "оригинал" профиля с образа (папку с моим именем в Documents and Settings), не помогло, пришлось всю винду с образа ставить.
Автор: JohnRD
Дата сообщения: 09.02.2007 16:40
Elroir
спасибо
все как часы..

круто
Автор: ViSiToR
Дата сообщения: 09.02.2007 18:16
Вобщем, не нашёл я достойных средств для скачивания и распаковки файлов средствами одной лишь системы, поэтому воспользовался curl и 7z...


Представляю вашему вниманию батник, которы поможет скачивать файлы с сети с расширение *.7z, *.zip, *.rar, *.tar, и распаковывать их в указанную (при установке) папку с именем самого архива!


Всё очень просто, скачиваем архив Down_and_Extract.zip v1.0 beta 2, распаковываем его куда нибудь, и запускаем пакетны файл (далее батник) “Down_and_Extract.bat”...

Далее программа потребует установить себя в Internet Explorer (далее IE), если будет запущен IE, то программа предложит их закрыть (при отмене интеграции не будет), после согласия на интеграцию (и по необходимости закрытия всех окон IE), будет предложено ввести путь к каталогу, в который будут скачиваться и распаковываться архивы (если путь не существует, и если возможно, то он будет создан), далее поступит вопрос о том, что нужно делать в случае совпадения имён при распаковке, если ответить "Да", то файлы будут заменяться, если нет, то будут переименовываться автоматически (в _1 _2 и т.д. в конце файла).

После установки, в меню которое выпадает по нажатию правой кнопкой мышки на ссылке IE, будет виден пункт с именем "Download and Extract", он и будет служить для закачки и распаковки.

------------
Примечания:
------------

В силу ограниченности утилиты 7z, если требуется скачать архив с расширением *.rar, то в папку с программой будет скачана утилита Rar.exe (269 kb) - с её помощью и будут закачиваться файлы подобного расширения.


Если нужно чтобы по окончанию не выводилось окно о том что закачка и распаковка окончена, нужно в начале батника (перед интеграцией) поменять это:


Код: Set Show_MessageAtEnd=1
Автор: igor_andreev
Дата сообщения: 09.02.2007 18:56
ViSiToR

Цитата:
просто напросто это блокирует окно Internet Explorer на момент скачки и распаковки, как это обойти я не имею понятия, и почему это происходит тоже (кто знает прошу рассказать)


В принципе, даже не скачав архива(мне в общем то не надо, у меня такое есть на чистом vbscript+wget) могу сказать, что в *.Run,*, 0, True - последняя True значит - дожидаться окончания работы приложения, поэтому наверно и блокирует. Попробуй сделай False.
Автор: Elroir
Дата сообщения: 09.02.2007 22:08
AZJIO

Цитата:
Вот это запускаю, и панель задач не появляется, то есть експлорер не запустился.

Есть два варианта:
1. У тебя нет утилиты cmdow.exe (если есть - кинь ее в директорию Windows)
2. Перед запуском батника, не было открытых директорий - это уже моя недоработка.
Решение:
1. Утилита cmdow.exe находится здесь.
2. Исправленный код -

Код:
@echo off
chcp 1251>nul
setlocal enabledelayedexpansion
for /f "usebackq tokens=8*" %%a in (`"cmdow /t /f | find /i "explorer""`) do (
if /i "%%a"=="explorer" set "open_windows=!open_windows! "%%b""
)
taskkill /f /im explorer.exe>nul
start explorer
for %%a in (%open_windows%) do start /min explorer %%a
Автор: AZJIO
Дата сообщения: 10.02.2007 01:32
Скачал утилиту, закинул ее в директорию Windows, создал батник с изменёным кодом, запустил, вылетели сообщения:

Цитата:
Путь "Downloads" не существует или не является каталогом.

И так для каждой папки.
А для своего компа я ещё вписываю строки типа таких

Цитата:
CHCP 1251
taskkill.exe /F /IM K-MANIA.EXE /IM SPV.EXE
start "" "C:\Program Files\Kleptomania\k-mania.exe"
start "" "C:\Program Files\Arsenal Company\Сократ Персональный 4.1\spv.exe"

Перезапуск прог, чтобы иконки в трее восстановить.
Автор: Elroir
Дата сообщения: 10.02.2007 02:45
AZJIO

Цитата:
Путь "Downloads" не существует или не является каталогом.
И так для каждой папки.

Это потому, что батник берет названия открытых директорий из заголовков окон. А в Windows могут быть две установки - писать в заголовке только имя директории или полный путь. Соответственно, если там только имя - эксплорер не знает где эта директория находится и не может ее открыть. Переключается эта установка в Tools->Folder Options->View->поставить/убрать галочку на Display the full path in the title bar.
Автор: ViSiToR
Дата сообщения: 10.02.2007 03:57
igor_andreev

Цитата:
последняя True значит - дожидаться окончания работы приложения, поэтому наверно и блокирует. Попробуй сделай False.

Гинеально и просто! спасибо!


Цитата:
у меня такое есть на чистом vbscript+wget

Можно взглянуть?





Как переменную вывести в виде сокращённого пути? или как преобразовывать обычны путь в коротки?
Т.е к примеру имеем переменную %programfiles%, и нужно чтобы в файл записалось так:


Цитата:
C:\progra~1


Как это сделать?

Добавлено:

Цитата:
Как это сделать?

Можно так:


Код: %programfiles:~0,9%~1
Автор: ViSiToR
Дата сообщения: 10.02.2007 07:11
Я давно справшивал, как можно проверить существование файла, и если существует, то присвоить ему уникальное имя которое не существует, мне тогда ответили, но способ был не очень полноцены, и если честно немогу найти где это было...

Поэтому немного поднапрягся, и вот результат:


Код: @echo off
Set File=Test.txt
Set Num=1

:Loop

If Not Exist %File% Goto EndLoop
For %%a In (%File%) Do (
Set FName=%%~na
Set FExt=%%~xa)
Set NewFName=%FName%_%Num%%FExt%
Set /a Num=%Num% + 1
(If Exist %NewFName% Goto Loop) && (Set NewFName=%NewFName%)
Set File=%NewFName%

:EndLoop

Echo %File%
pause
Автор: evle
Дата сообщения: 10.02.2007 07:58
ViSiToR

Цитата:
Как переменную вывести в виде сокращённого пути? или как преобразовывать обычны путь в коротки?

Из справки к for:
%~fsI Expands %I to a full path name with short names only.
Точно так же можно обрабатывать параметры, переданные батнику (%~fs1). Что делать дальше, думаю, понятно. Сделать без привлечения for, видимо, нельзя.
Автор: ViSiToR
Дата сообщения: 10.02.2007 08:12
evle

Цитата:
Из справки к for

Уау! спасибо!....
Щас выложу вторую бету шедевра для скачки и распаковки файлов

Добавлено:
Опять старые грабли - батнику передаётся параметр ровняющийся ссылке из сети, ссылка содержит символ &, и батник получает только пол ссылки, облазил весь поиск по этой и первой части, нигде немогу найти решение - как передать в качестве параметра ссылку содержащую символы & ?

Добавлено:
evle


Цитата:
Сделать без привлечения for, видимо, нельзя.

Если это путь к батнику, то можно так:

%~fs0
Автор: Elroir
Дата сообщения: 10.02.2007 12:39
ViSiToR

Цитата:
присвоить ему уникальное имя которое не существует

Перебором чисел можно, конечно. А почему-бы не воспользоваться переменной %random% для получения уникального числа? Вероятность, что файл с таким номером уже есть, по моему, меньше.


Цитата:
Опять старые грабли - батнику передаётся параметр ровняющийся ссылке из сети, ссылка содержит символ &, и батник получает только пол ссылки

Если передавать параметр в кавычках, то передается полностью. Но вот как дальше работать с этой ссылкой в кавычках, я не знаю.

Добавлено:
Нет, знаю!!!
Передаем батнику ссылку в кавычках и делаем так:

Код:
set test=%1
set test=%test:&=^&%
echo %test:~1,-1%
Автор: ViSiToR
Дата сообщения: 10.02.2007 13:21
Elroir

Цитата:
А почему-бы не воспользоваться переменной %random% для получения уникального числа? Вероятность, что файл с таким номером уже есть, по моему, меньше.

Присмотрись плиз, мой пример не касается вероятности, там всё точно (файлу присвоится имя с последовательным числом, и гарантия того что такого файла не существует, почти 100%).


Цитата:
Если передавать параметр в кавычках, то передается полностью

Да, но потом мучаться с этим параметром.....


Цитата:
Передаем батнику ссылку в кавычках и делаем так

Тоже не очень практично, я нашёл более элегантное решение на мой взгляд - просто передаём все символы & как hex-код (& = %26) - см. как я это сделал в Down_and_Extract.bat...




Версия 1.0 beta 2 - Down_and_Extract.zip - обновил мой пост (там все описания и список изменении).
Автор: Elroir
Дата сообщения: 10.02.2007 13:35
ViSiToR

Цитата:
Присмотрись плиз, мой пример не касается вероятности, там всё точно (файлу присвоится имя с последовательным числом, и гарантия того что такого файла не существует, почти 100%).

Я не имел в виду просто добавлять %random% без проверки
Просто вместо того, чтобы идти по числам от одного и дальше, проверяя каждый раз есть ли такой файл, можно точно также проверять имя файла с %random% - в некоторых случаях это будет быстрее.
Но в принципе я согласен


Цитата:
Тоже не очень практично, я нашёл более элегантное решение на мой взгляд - просто передаём все символы & как hex-код (& = %26)

Красиво! Мой вариант сработает, когда надо рабоать со ссылкой, как с текстом - то есть просто обработка текстового файла.
Автор: evle
Дата сообщения: 10.02.2007 13:36
ViSiToR

Цитата:
как передать в качестве параметра ссылку содержащую символы & ?

Поставить перед амперсандами символ «^».
Либо передать в кавычках и воспользваться вот этим:
%~1 Expands %1 and removes any surrounding quotation marks ("").

Цитата:
Если это путь к батнику, то можно так:

Первый вопрос был про обычную переменную %programfiles%.
Автор: igor_andreev
Дата сообщения: 10.02.2007 13:37
ViSiToR

Цитата:
Можно взглянуть?

http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=10066&start=40#11
Автор: evle
Дата сообщения: 10.02.2007 13:39

Цитата:
Просто вместо того, чтобы идти по числам от одного и дальше, проверяя каждый раз есть ли такой файл, можно точно также проверять имя файла с %random% - в некоторых случаях это будет быстрее.

Зачем %random% и цифры, если есть «%time::=_%»?
Автор: Elroir
Дата сообщения: 10.02.2007 13:53
evle

Цитата:
Зачем %random% и цифры, если есть «%time::=_%»?

Да... генератор неповторяющихся чисел получается помощнее, чем %random%, да еще и последовательных (в пределах суток)
Я про time даже и не думал.
Автор: LeXorium
Дата сообщения: 10.02.2007 14:01
батник

Код: E:\MCODER\mplayer\mplayer %1 -frames 100 -vo null -vf cropdetect > crop.log
Автор: ViSiToR
Дата сообщения: 10.02.2007 14:15
Elroir

Цитата:
проверять имя файла с %random% - в некоторых случаях это будет быстрее.

Может и быстрее (хотя куда уже быстрее), но...


Цитата:
Зачем %random% и цифры, если есть «%time::=_%»?


Ребята, я немного наверно недообъяснил цель этого метода...

Тут нужно просто красиво создать новое имя файла, без всяких случайно сгенерированных чисел, и без приставки даты и/или времени к имени файла - точно также как это делает архиватор 7z (с ключом -aot), если файл существует, то присваивается имя файла плюс _1, если и этот файл существует, то идёт дальше по цифрам - этот метод очень полезен если постоянно в каталог помещается один и тот же архив (или просто файл), но содержание каждый раз другое, и нужно просто зафиксировать последовательность появлении этого файла в каталоге (и приставка времени тоже может это достичь, но именно таким образом, оно коротко, и ясно ).

igor_andreev

Цитата:
http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=10066&start=40#11

Спасибо! будем смотреть - а распаковка где? или это только скачка?
Автор: Elroir
Дата сообщения: 10.02.2007 14:24
LeXorium

Код:
@echo off
setlocal
set line=99
for /f "skip=%line% tokens=8 delims=) " %%a in (crop.log) do (
if not defined string set string=%%a
)
echo %string%
Автор: ViSiToR
Дата сообщения: 10.02.2007 14:30
evle

Цитата:
Поставить перед амперсандами символ «^»

Нет возможности, это не известная ссылка, т.е как бы есть (скриптом vbs), но тогда уже проще заменить эти символы на их hex-аналоги, что в принципе я и сделал. Спасибо ещё раз!
Автор: igor_andreev
Дата сообщения: 10.02.2007 14:41
ViSiToR

Цитата:
а распаковка где?

Добавить не сложно, но мне не надо. Я же wget-ом все подряд качаю, не только архивы, но и *.exe и *.txt с lib.ru и т.д.
Автор: Elroir
Дата сообщения: 10.02.2007 14:43
ViSiToR
igor_andreev
Люди, можно вопрос? А зачем качать wget-ом?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.