Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
очередную прогу радил, для организации пользовательского интерфейса в бат файлах
InputBox.exe3,00 КБ (3 072 байт)
 
пример командной строки  
InputBox.exe  /MyTitle/введите|цены|на кефир/300/250
результат
   
/заголовок окна/текст окна, знак | - перенос строки/x-позиция окна на экране/y позиция
 
возвращаемое значение длина введенной строки(количество введенных символов).
введенная строка записывается в файл out.ini рядом с прогой.
 
если не указать положение на экране окно выведеться в левом верхнем углу. количество строк сообщения ограничено пятью, длина одной строки сообщения - 39 символов. количество введенных символов в окно ограничено 65536 символами - 64 кб, без переноса строки.
 
фигня маленько получилась знак | надо экранировать ^|. на какой заменить бы.

Цитата:
 
ECHO OFF
COLOR 9F
CLS
chcp 1251
InputBox.exe /TITLE/введите цены на кефир^| в капейка руплях/300/250
chcp 866
PAUSE
 

для получения второго значения удалять out.ini не обязательно, он перезапишется

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 05:55 06-10-2009 | Исправлено: bomzzz, 09:57 06-10-2009
TruLander100

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Спасибо выручил)). мне нужно такое специфическое название файлов для файловой cms которая хранит файлы генерируя их названия счетом секунд с 1970 года)), просто мне нужно создать видимость, что посты публикуются в разное время)) конешно в место 500 я буду подставлять колтчество секунд примерно равное 2-3 часам, а случайное число, это небольшой разброс между этими 2-3 часами.

Всего записей: 24 | Зарегистр. 22-03-2009 | Отправлено: 08:47 06-10-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
утилита для запуска батника невидимым.  
BatStarter.exe 1,50 КБ (1 536 байт)
параметры командной строки
BatStarter.exe /имя-путь к запускаемому батнику/параметры командной строки/вид окна
если параметр вид окна опустить, по умолчанию - окно невидимое. так же можно использовать "пасхальные яйца":

Цитата:
 
0 - скрытое окно.
1 - нормальное окно.
2 - минимизированное окно.
3 - максимизированное окно.
4 - запустить приложение с окном в том состоянии, в котором оно было последний раз. Текущее активное окно останется активным.
5 - запустить приложение с окном в текущем состоянии.
7 - минимизированное окно. Текущее активное окно останется активным.
10 - состояние окна по умолчанию для приложения.
 

параметр - "параметры командной строки" тоже можно опустить. если вид окна понадобится не скрытый тогда /имя//10
возвращаемое значение - в случае удачного запуска хендл запущенного процесса

Цитата:
 
The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.
 

в случае ошибки возвращается значение ошибки - число меньше 32

Цитата:
 
0    The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND    The specified file was not found.
ERROR_PATH_NOT_FOUND    The specified path was not found.
ERROR_BAD_FORMAT    The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
SE_ERR_ACCESSDENIED    The operating system denied access to the specified file.  
SE_ERR_ASSOCINCOMPLETE    The filename association is incomplete or invalid.
SE_ERR_DDEBUSY    The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL    The DDE transaction failed.
SE_ERR_DDETIMEOUT    The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND    The specified dynamic-link library was not found.  
SE_ERR_FNF    The specified file was not found.  
SE_ERR_NOASSOC    There is no application associated with the given filename extension.
SE_ERR_OOM    There was not enough memory to complete the operation.
SE_ERR_PNF    The specified path was not found.
SE_ERR_SHARE    A sharing violation occurred.
здесь номера возможно не по порядку идут как точно я не знаю надо поискать таблицу или опытным путем
http://msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx
                ' ERROR_FILE_NOT_FOUND = 2&  
                ' ERROR_PATH_NOT_FOUND = 3& - этой ошибки не получилось добиться, пишет файла нету
                ' ERROR_BAD_FORMAT = 11&  
                ' SE_ERR_NOASSOC = 31  
                ' SE_ERR_OOM = 8  
 

примеры:
BatStarter.exe /MyBatnik.bat
BatStarter.exe /c:\MyBatnik.bat/1234567890
BatStarter.exe /MyBatnik.bat//3
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
 
BatStarterU.exe 1,50 КБ (1 536 байт)
вариант где разделителем параметров командной строки используется знак ` - буква ё в английской раскладке, на тот случай если в параметре - "параметр командной строки" вдруг понадобится слеш.
BatStarter.exe `MyBatnik.bat`/Title/ввыведите|цены|на кефир/300/250`10

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:29 06-10-2009 | Исправлено: bomzzz, 18:29 06-10-2009
SergFM



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем привет...
при заливке файла на фтп через батник который ссылается на команды фтпшные происходит фигня. файл недозаливается, хотя ошибку не выдает..если файл копировать через тотал по Ctrl+F тогда всё нормально...

Всего записей: 719 | Зарегистр. 06-11-2002 | Отправлено: 19:29 06-10-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
каманды в студию.  
 
впрочем в тотале к примеру может быть дозаливка срабатывающая автоматически при разрывах связи,а в простейшем консольном фтп клиенте винды ее может и не быть в принципе. я тоталом не пользуюсь уже не помню какие тама настройки. у мну cuteftp (умеет заливать в 4 потока) и flashfxp(умеет перемещать файлы с фтп сервера на сервер, впроечм cuteftp это тоже умеет, зато ссылки копировать удобнее), и ftptransport в асновном. в даунлоад мастере фтп менеджер удобный для копирования ссылок групп файлов.
 
попробуй по оканчании заливки получить размер файла и если он меньше чем надо попробовать еще раз залить интересно чиво он напишет докачать или перезаписать.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 19:47 06-10-2009 | Исправлено: bomzzz, 20:00 06-10-2009
Dr29BArt



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Объясните мне как можно использовать вложенные команды if их синтаксис.
Так же не пойму где тут ошибка (почему не выводит %b%:

Код:
@echo off
set /p a="Enter 0 or 1 "  
if "%a%" == "0" @echo You entered %a%
if "%a%" == "1" (  
set /p b="Enter 2 or 3 "  
@echo You entered %b%
)
pause

Либо просто помогите написать батник, который находил бы файлы в некотором месте с некоторым расширением и ожидал бы ввода 0 для удаления найденного файла, 1 - для переименования его.

Всего записей: 7 | Зарегистр. 20-09-2009 | Отправлено: 03:10 07-10-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кавычки работают, иначе ты никогда не увидел бы результата работы паузы - в чем дело не знаю,  
вот так не работает
(set /p a="Enter 0 or 1 "
@echo You entered %a%)
а вот так работает
set /p a="Enter 0 or 1 "
@echo You entered %a%
переменной ничего не присваевается.
(set /p a="Enter 0 or 1 ")
(@echo You entered %a%)
вот так работает - ну значит в одном блоке так нельзя. обойдись без скобок. здесь наверняка можно else обойтись без переходов
 

Цитата:
 
@echo off
set b=90
set /p a="Enter 0 or 1 "
if "%a%" == "0" @echo You entered %a%
if "%a%" == "1" (  
set /p b="Enter 2 or 3 "
echo You entered %b%)
echo You entered %b%
pause  
 

вот из такой конструкции однозначный вывод делается
 
так вот сделай
@echo off
set /p a="Enter 0 or 1 "
if "%a%" == "0" @echo You entered %a%
if "%a%" == "1" set /p b="Enter 2 or 3 "
if "%a%" == "1" echo You entered %b%
pause

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 07:41 07-10-2009 | Исправлено: bomzzz, 08:14 07-10-2009
SergFM



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Цитата:
каманды в студию.  
не проблема...вот они...
 
ftp -i -s:D:\folder\ftp.txt ftp.my.com
 
содержание файла ftp.txt
 
логин
пароль
cd prices
delete price.xls
send d:\prices\price.xls
bye
close

Всего записей: 719 | Зарегистр. 06-11-2002 | Отправлено: 10:20 07-10-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xls это какие то файлы типа html или txt, не знаю как точнее выразиться.
они должны весить немного и передавать как asc?????
 
 
Добавлено:
ECHO OFF
COLOR 9F
CLS
echo OPEN ftp.narod.ru>MYFTP.txt
echo MyLogin>>MYFTP.txt
echo MyPassword>>MYFTP.txt
echo BELL>>MYFTP.txt
echo STATUS>>MYFTP.txt
echo DIR>>MYFTP.txt
echo binary>>MYFTP.txt
echo send current.exe>>MYFTP.txt
echo quit>>MYFTP.txt
ftp -s:myftp.txt
pause
 
у меня фурыкаит намальна,, правда файл для опытов взял всего 3.5 кб
на народ нельзя больше 5 мб заливать - попробовал архивчик 5 мб, залил, скачал проверил - работаит
 
ну и па твоему работаит намальна
ECHO OFF
COLOR 9F
CLS
ftp -i -s:myftp.txt ftp.narod.ru
pause
 
MyLogin
MyPassword
BELL
STATUS
DIR
binary
send current.exe
quit
 
если тама такой файл лежит то сразу пишет что гатова. надо попробвоать чтоб размер не совпадал
 
разрезал файл и попробовал дозалить, файл полностью перезалился.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:23 07-10-2009 | Исправлено: bomzzz, 10:49 07-10-2009
SergFM



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
работает...спс..
скорее всего виноват был ascii режим...после переключения в binary всё работает...

Всего записей: 719 | Зарегистр. 06-11-2002 | Отправлено: 11:03 07-10-2009
Mosl

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.  
Помогите в написании сценария. Надо написать сценарий при выполнении, которого будет выполняться ping сетевого ресурса, если ресурс не отвечает, будет выполняться действие по переподключению VPN соединения (разрыв и соединение).
 
ЗЫ: Я так понимаю надо написать что то вро де этого:
ping 10.0.0.2
 
При получении ответа "потеряно 100%" выполнить
 
rasphone.exe -d VPN /disconnect  
rasphone.exe -d VPN
 
а при получении ответа "получено 100%" нечего не делать
 
В конце всех операций завершить выполнение бат файла.

Всего записей: 620 | Зарегистр. 09-05-2006 | Отправлено: 16:31 07-10-2009 | Исправлено: Mosl, 16:58 07-10-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mosl

Код:
 
@echo off
1>nul ping -n 1 ya.ru && goto:eof
 
rasdial "vpn_name" /disconnect
rasdial "vpn_name" vpn_login vpn_password
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:55 07-10-2009
Mosl

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Спасибо вечером попробую!
ps я же могу использовать команду rasphone вместо rasdial?  

Всего записей: 620 | Зарегистр. 09-05-2006 | Отправлено: 17:16 07-10-2009 | Исправлено: Mosl, 17:18 07-10-2009
Dr29BArt



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
echo off
title laba2
set a=2
set b=2
for %%f in ("D:\*.swp") do (
set /p a="What do with %%~nf? (0 - delete; 1 - rename): "
if "%a%" == "0" (del "%%f" /f)
if "%a%" == "1" (
set /p b="Enter new name of %%~nf: " ren "%%f" %p%)
ping -n 1 -w 500 192.168.255.255 >nul
cls
)
pause

 
Помогите исправить. Не считывает переменную а, ну далее конечно код не работает.

Всего записей: 7 | Зарегистр. 20-09-2009 | Отправлено: 22:59 07-10-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вы че седня сгаварились что ли? в пределах одной скобки почему то значение не присваевается, а только при выходе из скобок.воот так и исправляй. ну тута непросто будет так как с теле цикла - но не значит что нельзя исправить
 
Добавлено:
http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=29819&start=1040
MsgBox.exe
 
при помощи меседж бокса сделай - вообще ништяк получица удобна

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:07 07-10-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dr29BArt
Код:
@echo off
setlocal enabledelayedexpansion
for %%F in ("D:\*.swp") do (
   
set /p a="What do with %%~nxF? (0 - delete; 1 - rename): "
    if "!a!" == "0" del "%%~nxF" /f
    if "!a!" == "1" (
       
set /p b="Enter new name of %%~nxF: "
        ren "%%~nxF" !b!
   
)
)
 ?  Код создан и опубликован с помощью SciTE-Ru

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 00:38 08-10-2009
Dr29BArt



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ozers, ну спасибо, я уж думал не найду овтет. всё ништяк

Всего записей: 7 | Зарегистр. 20-09-2009 | Отправлено: 01:08 08-10-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
На мой взгляд, с этим уже вполне можно жить. Но, как всегда, жизнь не так проста, как кажется. Есть одна проблема. Переменные, использующиеся в блоках then и else, раскрываются перед началом выполнения этих блоков, а не в процессе выполнения. В приведенном примере это не вызывает никаких проблем, однако в следующем вызовет:
 
if "%BUILDMODE%" == "debug" (
    echo INFO: Устанавливаем debug-режим окружения
    set OPTFLAGS=/Od
    set CCFLAGS=%OPTFLAGS% /MDd /Z7
) else (
    echo INFO: Устанавливаем release-режим окружения
    set OPTFLAGS=/O2
    set CCFLAGS=%OPTFLAGS% /MD
)
 
Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.
Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe, либо использованием команды
 
setlocal enabledelayedexpansion
 
в тексте самого bat-файла. Второй способ мне представляется более удобным – не очень здорово требовать от кого-то запуска твоего сценария с определенным параметром.
С учетом сказанного предыдущий «неправильный» пример может быть исправлен так:
 
setlocal enabledelayedexpansion
 
rem ...
 
if "%BUILDMODE%" == "debug" (
    echo INFO: Setting up debug mode environment
    set OPTFLAGS=/Od
    set CCFLAGS=!OPTFLAGS! /MDd /Z7
) else (
    echo INFO: Setting up release mode environment
    set OPTFLAGS=/O2
    set CCFLAGS=!OPTFLAGS! /MD
)
 
Вот теперь это почти полноценный if-then-else блок. Почти, потому что если в одной из команд echo у вас встретится закрывающая круглая скобка, то вам необходимо заэкранировать ее символом ^, иначе синтаксический анализатор путается…
Но в любом случае, это гораздо лучше безумного количества меток и переходов.
 

Dr29BArt

Цитата:
 
@echo off
setlocal enabledelayedexpansion
set /p a="Enter 0 or 1 "
if "%a%" == "0" @echo You entered !a!
if "%a%" == "1" (  
set /p b="Enter 2 or 3 "
echo You entered !b!)
 


Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 01:08 08-10-2009 | Исправлено: bomzzz, 01:09 08-10-2009
TruLander100

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.  
помогите с батником: необходимо в каждий .txt файл из заданной папки вставить слово "<LI>" в 7 строку. Спасибо

Всего записей: 24 | Зарегистр. 22-03-2009 | Отправлено: 17:38 08-10-2009
VV2006

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А в WindowsXP что, нельзя, используя только встроенные средства оси, одновременно
запустить на выполнение из командного файла несколько приложений (команд)?
 
Написал cmd-файлы для запуска с флэшки процедур создания зеркал обновлений для DrWeb и Avira Antivir Premium. Справедливо решил, что тыкать два разА - громадные потери времени. Объеденил в один cmd - запускаются по очереди - потери времени ещё больше!  
 
Задачу решил "нечисто" - через (поту)сторонний LacunaLauncher, с которым тоже есть непонятка:
 
"%~dp0SOFT\LacunaLauncher\ll.exe" "%~dp0SOFT\LacunaLauncher\MakeMirrorAV.txt" 0 0
- почему-то не работает: ll.exe "своих" не находит.  
 
set ThisDisk=%~dp0
"%ThisDisk%SOFT\LacunaLauncher\ll.exe" "%ThisDisk%SOFT\LacunaLauncher\MakeMirrorAV.txt" 0 0
- а так - работает.
 
Кстати, насчёт вставки звуковых сигналов: сначала решил через playsound.exe, что тоже "нечисто", но затем нашёл такое простенькое решение beep-задачи: @echo (Alt-7).

Всего записей: 2071 | Зарегистр. 10-02-2006 | Отправлено: 21:26 08-10-2009 | Исправлено: VV2006, 21:30 08-10-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru