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

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

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

Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

   

KLASS



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

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

Всего записей: 11452 | Зарегистр. 12-10-2001 | Отправлено: 04:28 24-09-2002 | Исправлено: Elroir, 19:35 11-09-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
scup
Какое у тебя храниться значение в переменной с датой
пн, 05/12/2005?
05/12/2005?
Первый случай неверный...
 
Добавлено:
scup

Код:
 
@Echo On
FOR /F "DELIMS=" %%A IN ('DATE /T') do SET OldDate=%%A
Date 1/12/2005
Echo %OldDate% | Date
 

 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:13 05-12-2005
Smitis



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

Цитата:
Шапку пора в топике делать  И там собирать недокументированные фичи от майкрософт, то, про что они во встроенной справке не пишут. Мнооого пунктов таких наберется.

Уже парочка есть. Вот только с делами разберусь, отредактирую  и "запостю". А в шапке можно линки давать на посты.
 
scup

Цитата:
Да, хотелось бы услышать или почитать об этом, а то эти замены мне ни очем не говорят, особенно с восклицательными знаками. Кто-то может ликбез провести?

Как уже писал KapralBel: set /? Больше в "официальной литературе" поэтому поводу ничего нет.
А ликбез можно попробывать провести. Чуток времени свободного только будет. Только я не понял, что за "замены с восклицательными знаками"?
 
 
Добавлено:
KapralBel

Цитата:
Echo %OldDate% | Date

А почему не просто date %olddate% ?

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 23:47 05-12-2005
Iacoyn



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди добрые, помогите коллективным разумом! Есть задача в папке WINDOWS после установки апдейтов создаются подпапки типа $NT...$ с которыми комманды cmd.exe работать отказываются - как их на автомате удалять? del не срабатывает ни на $*$ ни $$*$$, в чём я не прав?
Немного неправильно задал вопрос - DIR и прочие не выдают файлов и папок в списке если их имена начинаются с $ - как получить их список для последующего удаления?

Всего записей: 2421 | Зарегистр. 07-05-2002 | Отправлено: 01:31 06-12-2005
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Iacoyn
Сейчас посмотреть негде, но там вроде атрибуты на папках стоят, системный, скрытый, только для чтения.
Посмотреть все файлы, не взирая на атрибуты, можно командой DIR /a
Папки удаляются командой RD, причём маска не поддерживается.
Для перечисления - FOR
В общем
Код:
 
for /f "delims=/" %d in ('dir /b /ad $*$') do @rd /s/q %d
 

Прямо из cmd.exe (не из пакетного файла). Из пакетного файла будет так:
Код:
 
@echo off
for /f "delims=/" %%d in ('dir /b /ad $*$') do rd /s/q %%d
 

Конечно, в данном случае delims можно не ставить, но так, на всякий случай...

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 02:17 06-12-2005
scup



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

Цитата:
А почему не просто date %olddate%
Smitis Не поверишь, вчера перед тем как задавать вопрос использовал такую конструкцию, выдавалась ошибка "неверная дата, введите новую дату". Способ KapralBel заработал. Седня попробовал date %olddate% - тоже получилось.  

Цитата:
Только я не понял, что за "замены с восклицательными знаками"?  
Я имел ввиду, что иногда используют переменные %СС%, а иногда !СС!. igor_andreev что-то там чуть-чуть обьяснял 2 страницы назад, но очень мало, когда их использовать?
 
 

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 09:17 06-12-2005
Smitis



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

Цитата:
когда их использовать

В скобках!
Несколько команд/строк можно объеденить в "одну", заключив их в скобки. Типа {} с языках С, джаве. Используется чтобы создать "структурные" IF и FOR (можно, конечно, и другое применение найти).
Пример
Код:
 
@echo off
set aaa=111
if h == h (
set aaa=222
echo %aaa%
)
echo %aaa%
 

Обрати внимание, что вначале выводиться 111, а затем 222. Т.е. условие всегда истинно, переменная ааа значение 222 вроде бы получила, но echo в скобках вывела старое значение. Что-бы в скобках можно было использовать новое значение сразу, необходимо, во-первых, либо запускать cmd.exe с ключом /v:on, либо использовать команду setlocal с параметром enabledelayedexpansion. Во-вторых, вместо % использовать !

Код:
 
@echo off
setlocal enabledelayedexpansion
set aaa=111
if h == h (
set aaa=222
echo %aaa%
echo !aaa!
)
echo %aaa%
 

Вторая echo в скобках выведет новое значение переменной.
 

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 10:10 06-12-2005
KapralBel



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

Цитата:
Smitis Не поверишь, вчера перед тем как задавать вопрос использовал такую конструкцию, выдавалась ошибка "неверная дата, введите новую дату". Способ KapralBel заработал. Седня попробовал date %olddate% - тоже получилось.  

Могу сказать почему

Цитата:
FOR /F "DELIMS=" %%A IN ('DATE /T') do SET OldDate=%%A


Цитата:
FOR /F "DELIMS=" %%A IN ('DATE /T') do SET OldDate = %%A

Во втором случае видишь пробелы вокруг равно? Вот они и мешают
 
Smitis

Цитата:
date %olddate%
- можно и так

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:40 06-12-2005
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мою задачу, которая успешно решена с вашей помощью нужно немного изменить решение, надеюсь на вашу помощь. Итак:
 
01.01.2005
a
s
d
f
s
02.04.2005
d
f
g
d
03.05.2005
a
s
d
s
a
 
вывести только даты и строки, начинающиеся на а, но если под датой нет строки, начинающейся на а, то дату выводить не надо.
 
 

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 09:42 09-12-2005
Da_Neil



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задача: запустить скрытый (т.е. полностью спрятать интерфейс) процесс с низким приоритетом с параметрами, переданными скрипту, и оставаться запущенным до его завершения.  
Отдельны части задачи реализуется либо с помощью командного процессора, либо с помощью WSH. А вот всё вместе.. Без программирования что-нибудь получится сделать? Если нет, то нет ли у кого исходников нечто похожего на языках .NET?

Всего записей: 3420 | Зарегистр. 05-03-2002 | Отправлено: 00:13 11-12-2005 | Исправлено: Da_Neil, 00:15 11-12-2005
vito333



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Программа для создания самораспаковывающихся архивов, распаковывающихся
при помощи недокументированных функций OS.
Работает только под NT системами.
Коэффициент сжатия весьма невелик, намного уступая даже обычному zip (вдвое RAR-у), но скорость упаковки-распаковки практически мгновенная. Те же функции, что использует NTFS.
Работает как из ком строки, так и через GUI. Размер ~4kb.
 
http://vito.rbcmail.ru/Misc/NtPak.zip
 
может кому пригодится

Всего записей: 3324 | Зарегистр. 13-05-2002 | Отправлено: 07:39 12-12-2005
SEMENYCH



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
доброго времени суток! есть список шаров в файле shares.lst в формате:
resourse_path;resourse_name

Код:
\\servername\resourse1;name1
\\servername\resourse2;name2
\\servername\resourse3;name3
\\servername\resourse4;name4

 
При выполнении команды  

Код:
FOR /F "eol=; tokens=1,2 delims=; " %%i in (shares.lst) do call :doit %%i %%j

 
получаем:

Код:
1) %i=\\servername\resourse1 %j=name1
2) %i=\\servername\resourse2 %j=name2
3) %i=\\servername\resourse3 %j=name3
4) %i=\\servername\resourse4 %j=name4
5) %i= %j=

надо избавиться от последней (5) итерации. Откуда она взялась???
 
З.Ы. вся эта байда была затеяна мною чтобы, имея список шаров, которые необходимо заархивировать, создавать бэкапы В ОТДЕЛЬНЫЕ архивы с СОБСТВЕННЫМИ именами. Приблизительно по такому принципу:

Код:
FOR /F "eol=; tokens=1,2 delims=; " %%i in (shares.lst) do call :doit %%i %%j
:doit
winrar.EXE" a -afzip %2_ -agHH-MM_DD-MM-YY %1 -m5 -ibck -ilog_errors.log-dh

а получается 4 нужных архива и пятый - со всем содержимым папки, откуда вызывается сей батник, т.к. в последней итерации в WinRAR передаются пустые аргументы.
HELP ME!!!

Всего записей: 120 | Зарегистр. 28-01-2002 | Отправлено: 19:19 12-12-2005 | Исправлено: SEMENYCH, 19:29 12-12-2005
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 20:32 12-12-2005 | Исправлено: igor_andreev, 20:46 12-12-2005
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev а с моей задачей поможешь? Как вообще можно сравнить 2 строки?

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 09:44 13-12-2005
SEMENYCH



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
igor_andreevспасибо, выручил. я подозревал, что что-то упустил, но к концу дня уже перегрелся немного.

Всего записей: 120 | Зарегистр. 28-01-2002 | Отправлено: 10:19 13-12-2005
0Vovan0



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ, помогите решить задачку:
"Подготовить и набрать командный файл, реализующий выполнение следующих алгоритмов:
Ввести через формальный параметр имя текстового файла; если такого  файла с расширением .TXT не существует, выйти и сообщить об этом; если файл существует, осуществить переход в тот каталог, где он находится, вывести на экран распечатку каталога и содержимое файла."
 
Вся заковыка для меня в том, что я не знаю, как сделать так, чтобы после if исполнялась не одна комманда, а все последующие, пробовал это сделать с помощью меток - в принцмпе все получается но при этом оно еще делает то что под меткой, а это не нужно.
 
 

Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 13:26 13-12-2005
Smitis



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

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

Либо так
if условие (
операторы
) else (
операторы
)
 
или так
if условие goto метка
какие-то операторы
goto :eof
 
:метка
другие операторы
 
Это для XP/2000/etc.
 
В общем рекомендую следующую команду:
if /?
 

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 17:21 13-12-2005
NORIO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет. Возможно ли запускать батники в скрытом режиме в win 98.  То есть что бы ни окна ни значка небыло видно. И как можно максимально ускорить выполнение батников?

Всего записей: 875 | Зарегистр. 18-12-2004 | Отправлено: 17:51 13-12-2005
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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
 

Проверка на дату производиться упрощённо.

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 17:59 13-12-2005
scup



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis Угу, самое то, что надо. Спасибо.

Всего записей: 556 | Зарегистр. 04-04-2003 | Отправлено: 18:30 13-12-2005
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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 Надо сравнивать.

Всего записей: 3457 | Зарегистр. 09-02-2003 | Отправлено: 18:36 13-12-2005 | Исправлено: Smitis, 18:43 13-12-2005
   

Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru