Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: SEMENYCH
Дата сообщения: 12.12.2005 18:19
доброго времени суток! есть список шаров в файле shares.lst в формате:
resourse_path;resourse_name

Код: \\servername\resourse1;name1
\\servername\resourse2;name2
\\servername\resourse3;name3
\\servername\resourse4;name4
Автор: igor_andreev
Дата сообщения: 12.12.2005 19:32
SEMENYCH

Код:

@ECHO OFF

FOR /F "EOL=; TOKENS=1,2 DELIMS=; " %%i IN (shares.lst) DO CALL :DOIT %%i %%j

:: А вот тут после FOR... обязательно нужен или выход из батника(GOTO :EOF)
:: или переход на другую метку(GOTO :NEXT_LABEL), стоящую после :DOIT.
:: Иначе выполняется после FOR еще один раз метка батника :DOIT.
:: Параметров метка :DOIT не получает и соответственно выдает пустые строки

GOTO :EOF

:DOIT
ECHO 1-%1 2-%2
GOTO :EOF

:NEXT_LABEL
ECHO BY-BY
PAUSE

Автор: scup
Дата сообщения: 13.12.2005 08:44
igor_andreev а с моей задачей поможешь? Как вообще можно сравнить 2 строки?
Автор: SEMENYCH
Дата сообщения: 13.12.2005 09:19
igor_andreevспасибо, выручил. я подозревал, что что-то упустил, но к концу дня уже перегрелся немного.
Автор: 0Vovan0
Дата сообщения: 13.12.2005 12:26
Народ, помогите решить задачку:
"Подготовить и набрать командный файл, реализующий выполнение следующих алгоритмов:
Ввести через формальный параметр имя текстового файла; если такого файла с расширением .TXT не существует, выйти и сообщить об этом; если файл существует, осуществить переход в тот каталог, где он находится, вывести на экран распечатку каталога и содержимое файла."

Вся заковыка для меня в том, что я не знаю, как сделать так, чтобы после if исполнялась не одна комманда, а все последующие, пробовал это сделать с помощью меток - в принцмпе все получается но при этом оно еще делает то что под меткой, а это не нужно.


Автор: Smitis
Дата сообщения: 13.12.2005 16:21
0Vovan0

Цитата:
Вся заковыка для меня в том, что я не знаю, как сделать так, чтобы после if исполнялась не одна комманда, а все последующие, пробовал это сделать с помощью меток - в принцмпе все получается но при этом оно еще делает то что под меткой, а это не нужно

Либо так
if условие (
операторы
) else (
операторы
)

или так
if условие goto метка
какие-то операторы
goto :eof

:метка
другие операторы

Это для XP/2000/etc.

В общем рекомендую следующую команду:
if /?

Автор: NORIO
Дата сообщения: 13.12.2005 16:51
Привет. Возможно ли запускать батники в скрытом режиме в win 98. То есть что бы ни окна ни значка небыло видно. И как можно максимально ускорить выполнение батников?
Автор: Smitis
Дата сообщения: 13.12.2005 16:59
scup

Цитата:
вывести только даты и строки, начинающиеся на а, но если под датой нет строки, начинающейся на а, то дату выводить не надо.

Такой вариант подойдёт?

Код:
@echo off
for /f %%s in (list.txt) do call :lll %%s
goto:eof
:lll
set _t_=%~1
:: Запомнить дату
if "%_t_:~2,1%" == "." if not "%_t_:~0,1%" == "a" set _d_=%_t_%
:: Если не "а" - следующая строка
if not "%_t_:~0,1%" == "a" goto:eof
:: Если даты - вывести и удалить
if not "%_d_%" == "" (echo %_d_% & set _d_=)
:: Вывести строку на "а"
echo %_t_%
goto:eof
Автор: scup
Дата сообщения: 13.12.2005 17:30
Smitis Угу, самое то, что надо. Спасибо.
Автор: Smitis
Дата сообщения: 13.12.2005 17:36
NORIO

Цитата:
Возможно ли запускать батники в скрытом режиме в win 98. То есть что бы ни окна ни значка небыло видно.

Сложно с 9х. Даже проверить негде. Вот некоторые утилиты:
- http://www.mailsend-online.com/ - сдесь есть run_hide. Плохо, что всё платное.
- NirCmd http://www.nirsoft.net/utils/nircmd.html - Не знаю, будет ли работать под 9х
- sstart - Эта должна работать под 9х. Ищи через поисковики.


Цитата:
И как можно максимально ускорить выполнение батников?

Использовать более быстрый компьютер
Это интерпретатор, да ещё и ориентированный на выполнение внешних утилит. И читают командные процессоры пакетные файлы по строкам - открыл файл, нашёл нужную строку последывательным считыванием, считал строку, закрыл файл, выполнил, опять открыл... Врядли можно сильно ускорить. Поищи "компиляторы" батников в com или exe. На сайте, где run_hide есть такой - cmd2exe.
Есть ещё 4DOS http://jpsoft.com/ (не так давно стал бесплатным). Он умеет считывать командные файлы не по строкам, а целиком, что в принципе должно ускорить выполнение. Есть там в пакете batcomp для преобразования в некий промежуточный код, что тоже должно ускорить выполнение. Но не факт, что сам 4DOS работает быстрее command.com Надо сравнивать.
Автор: hacsoft
Дата сообщения: 14.12.2005 10:53
NORIO
На счет скрытого режима, такая утилика (hs_exec) есть тут:
http://fsaver.hut1.ru/users/arigato/HS_Packet.rar
Автор: b0bi
Дата сообщения: 15.12.2005 13:46
как вылечить следующую ситуацию:
есть директория C:\foo-1.2.3\bin в bin лежит батник runme.bat прописываю директорию в переменную path, при запуске runme.bat не находит, как выяснилось C:\foo-1.2.3\bin заменяется на C:\foo-1/2/3\bin.
Кто нибудь может помочь вылечить эту ситуацию?
Автор: jak_forest
Дата сообщения: 15.12.2005 16:19

Цитата:
выяснилось C:\foo-1.2.3\bin заменяется на C:\foo-1/2/3\bin

А пробовал в PATH добавлять путь в "..." (в двойных кавычках)?
Автор: Tatats
Дата сообщения: 17.12.2005 09:56
Подскажыте как убить процес или приложение из батника?
Например винамп закрыть.
Автор: Smitis
Дата сообщения: 17.12.2005 11:47
Tatats

Цитата:
Подскажыте как убить процес или приложение из батника?
Например винамп закрыть.

Если убить - taskkill (в ХР, в 2К отсутствует). Мне для "убивания" больше нравиться pskill с сайта http://www.sysinternals.com/
А если закрыть - это уже другое. Могу посоветовать
cmdow: cmdow /cls winamp.exe
или
nircmd
Автор: hacsoft
Дата сообщения: 17.12.2005 12:05
Smitis
У меня ХР и taskkill есть.
Автор: Smitis
Дата сообщения: 17.12.2005 21:25
hacsoft

Цитата:
У меня ХР и taskkill есть.

Я наверное слишком коротко написал
В ХР - есть. В 2000 - нет.
Автор: GeMir
Дата сообщения: 21.12.2005 14:23
Есть ли возможность реализовать конвертирование всех кириллических имён
mp3-файлов в папке в имена на транслите по следующему шаблону:

[more]
Цитата:
a - a
б - b
в - v
г - g
д - d
е - e
ё - jo
ж - zh
з - z
и - i
к - k
л - l
м - m
н - n
о - o
п - p
р - r
с - s
т - t
у - u
ф - f
х - h
ц - c
ч - ch
ш - sh
щ - shh
ъ - #
ы - y
ь - '
э - je
ю - ju
я - ja
[/more]

С помощью bat-файла?

Буду очень признателен за помощь в решении этой задачи...
Автор: igor_andreev
Дата сообщения: 21.12.2005 17:41
GeMir
Ну вообще то для транслитерации имен *.mp3 есть программка
http://mp3translit.narod.ru/
Но если очень охота батником [more]
то вот тебе чуть переделанный маленький кусок моего батника(полностью он переводил русские названия текстовых файлов в транслит и ВЕРХНИЙ регистр, конвертил в DOS, переназывал в 8.3-формат, добавлял описание, паковал в zip и т.д., нужен был как-то мне такой).

Код:

@ECHO OFF & SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
CHCP 1251
CLS

CD /D Disk:\Path
FOR %%A IN (*.MP3) DO (
SET FILENAME=%%~nA
SET FILENAME=!FILENAME:ж=ZH!
SET FILENAME=!FILENAME:Ж=ZH!
SET FILENAME=!FILENAME:ц=TS!
SET FILENAME=!FILENAME:Ц=TS!
SET FILENAME=!FILENAME:ч=CH!
SET FILENAME=!FILENAME:Ч=CH!
SET FILENAME=!FILENAME:ш=SH!
SET FILENAME=!FILENAME:Ш=SH!
SET FILENAME=!FILENAME:щ=SCH!
SET FILENAME=!FILENAME:Щ=SCH!
SET FILENAME=!FILENAME:ю=YU!
SET FILENAME=!FILENAME:Ю=YU!
SET FILENAME=!FILENAME:я=YA!
SET FILENAME=!FILENAME:Я=YA!
SET FILENAME=!FILENAME:Ц=TS!
SET FILENAME=!FILENAME:Ч=CH!
SET FILENAME=!FILENAME:Ш=SH!
SET FILENAME=!FILENAME:Щ=SCH!
SET FILENAME=!FILENAME:Ж=ZH!
SET FILENAME=!FILENAME:а=A!
SET FILENAME=!FILENAME:б=B!
SET FILENAME=!FILENAME:в=V!
SET FILENAME=!FILENAME:г=G!
SET FILENAME=!FILENAME:д=D!
SET FILENAME=!FILENAME:е=E!
SET FILENAME=!FILENAME:ё=E!
SET FILENAME=!FILENAME:з=Z!
SET FILENAME=!FILENAME:и=I!
SET FILENAME=!FILENAME:й=I!
SET FILENAME=!FILENAME:к=K!
SET FILENAME=!FILENAME:л=L!
SET FILENAME=!FILENAME:м=M!
SET FILENAME=!FILENAME:н=N!
SET FILENAME=!FILENAME:о=O!
SET FILENAME=!FILENAME:п=P!
SET FILENAME=!FILENAME:р=R!
SET FILENAME=!FILENAME:с=S!
SET FILENAME=!FILENAME:т=T!
SET FILENAME=!FILENAME:у=U!
SET FILENAME=!FILENAME:ф=F!
SET FILENAME=!FILENAME:х=H!
SET FILENAME=!FILENAME:ъ=Y!
SET FILENAME=!FILENAME:ы=Y!
SET FILENAME=!FILENAME:ь=Y!
SET FILENAME=!FILENAME:э=E!
SET FILENAME=!FILENAME:А=A!
SET FILENAME=!FILENAME:Б=B!
SET FILENAME=!FILENAME:В=V!
SET FILENAME=!FILENAME:В=W!
SET FILENAME=!FILENAME:Г=G!
SET FILENAME=!FILENAME:Д=D!
SET FILENAME=!FILENAME:Е=E!
SET FILENAME=!FILENAME:Ё=E!
SET FILENAME=!FILENAME:З=Z!
SET FILENAME=!FILENAME:И=I!
SET FILENAME=!FILENAME:Й=I!
SET FILENAME=!FILENAME:К=K!
SET FILENAME=!FILENAME:Л=L!
SET FILENAME=!FILENAME:М=M!
SET FILENAME=!FILENAME:Н=N!
SET FILENAME=!FILENAME:О=O!
SET FILENAME=!FILENAME:П=P!
SET FILENAME=!FILENAME:Р=R!
SET FILENAME=!FILENAME:С=S!
SET FILENAME=!FILENAME:Т=T!
SET FILENAME=!FILENAME:У=U!
SET FILENAME=!FILENAME:Ф=F!
SET FILENAME=!FILENAME:Х=H!
SET FILENAME=!FILENAME:Ъ=Y!
SET FILENAME=!FILENAME:Ы=Y!
SET FILENAME=!FILENAME:Ь=Y!
SET FILENAME=!FILENAME:Э=E!
ECHO.@REN "%%A" "!FILENAME!.MP3">>FILE_ID.DIZ
)

ENDLOCAL

Автор: GeMir
Дата сообщения: 21.12.2005 18:39
igor_andreev

Цитата:
Ну вообще то для транслитерации имен *.mp3 есть программка

Она, к сожалению, на русском...

Цитата:
Но если очень охота батником

Спасибо...
Автор: Garrett
Дата сообщения: 22.12.2005 19:13
Есть какая-либо утилита командной строки для закачки каталогов с всеми подкаталогами с FTP-сервера на локальный диск? (нужно для бакапа, каждый день делаю или фаром или тоталом, хочется автоматизировать процесс)
Автор: volodyalipkin
Дата сообщения: 22.12.2005 19:26
Garrett
В 4NT существует
Автор: Smitis
Дата сообщения: 23.12.2005 00:17
Garrett

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

WGET http://xoomer.virgilio.it/hherold/
Ещё почитать http://vap.org.ru/wget/
Автор: ymsssg
Дата сообщения: 23.12.2005 07:10
Garrett
А руками написать скрипт делающий это слабо?
Автор: WerGaz
Дата сообщения: 23.12.2005 09:13
Доброго времени суток, уважаемые.
Мне нужно разработать командный файл, который бы получал в качестве аргумента имя текстового файла и выводил на экран информацию о том, сколько символов, слов и строк в текстовом файле.
Насчёт подсчитать строки всё понятно (есть несколько решений). А как с помощью батника подсчитать символы и слова? Какими командами имеет смысл воспользоваться?
Автор: igor_andreev
Дата сообщения: 24.12.2005 12:25
WerGaz
Точно не подсчитаешь. Батниками можно конечно всякие трюки проделывать, но они ну никак не язык программирования высокого уровня. Даже специализированные утилиты считают кто во что горазд, Microsoft Word одно выдает, wc.exe - другое, третья утилита - третье.

Количество знаков можно вычислить немного дурацким способом (но он работает).
Командой ECHO.>file.tmp (ECHO/>file.tmp и т.п.) Windows создает пустой файл размером 2 байта. Отнять стало быть 2 байта от размера.

Код:

@ECHO OFF

SET my_line=Lorem ipsum dolor sit amet consectetuer adipiscing elit.
ECHO %my_line%>file.tmp

FOR %%A IN (file.tmp) DO SET temp_file_size=%%~zA
SET /A chars_count=%temp_file_size%-2

DEL file.tmp & ECHO [%chars_count%]%my_line% & PAUSE

Автор: Garrett
Дата сообщения: 24.12.2005 19:05
ymsssg
> А руками написать скрипт делающий это слабо?

Если ты такой крутой, попробуй сам.
На скрипте я не смогу или займет много времени, мне проще это сделать на VC++, но зачем тратить время, когда наверняка кто-то уже сталкивался с данной проблемой и может имеет решение. Т.е. я стараюсь придерживаться принципа, что если есть программа, которая делает, то что мне нужно и мне она нравится, то нечего изобретать велосипед.
Автор: Smitis
Дата сообщения: 24.12.2005 22:50
Garrett

Цитата:
На скрипте я не смогу или займет много времени, мне проще это сделать на VC++, но зачем тратить время, когда наверняка кто-то уже сталкивался с данной проблемой и может имеет решение.

Я уже писал - используй WGET. Лучшего не придумать.
Автор: researcherr
Дата сообщения: 25.12.2005 12:48
Здравия всем желаю.
Все обыскал не могу решить задачи:
1. из батника делать enable/disable сети (ethernet)
2. запускать приложения с возвратом (получением) PID-а процесса для последующего
удаления taskkill-ом.

Заранее благодарен.
Автор: igor_andreev
Дата сообщения: 25.12.2005 16:40
researcherr
2. А приложение в одном экземпляре стартует, других с таким именем нет в этот момент? Тогда, раз есть у тебя taskkill, то должен быть и tasklist, из него PID взять.
Если несколько таких приложений одновременно висит, то они запущены с какими-нибудь параметрами командной строки? Тогда рекомендую cmdline http://www.diamondcs.com.au/index.php?page=console-cmdline (13 Кб в архиве). У меня похожая задача для убиения wget есть, но не батник, в nnCron-е, он в лог записывает все старты wget-a, время старта, PID, параметры запуска. Да и без батника удобная утилита, набрал в комстроке cmdline, посмотрел PID и tskill <этот PID>

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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