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

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

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

Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



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

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

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:08 19-11-2007 | Исправлено: Dmitriy05, 22:49 13-04-2008
nNau



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
z3r
Если нужно удалить все файлы из c:\CLients и его подкаталогов то:
 
del /s /q c:\CLients\*.*
 
Если не все, то вместо *.* задать маску, например:
 
del /s /q c:\CLients\*.txt

Всего записей: 83 | Зарегистр. 13-05-2004 | Отправлено: 06:12 17-02-2009 | Исправлено: nNau, 06:27 17-02-2009
Maza_Faka



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

Цитата:
мониторить лог файлы на предмет появления набора символов?


Код:
 
@Echo Off
Type log.txt | Find /i "Some symbols">Nul && Echo Success
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:42 17-02-2009
nNau



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

Цитата:
Нужно по условию если встречается фраза "uses modified data file -" взять впереди стоящий от неё ник, который может содержать различные символы, включая пробелы, но исключая двоеточие, найти его "id" выше по тексту и это число занести в буфер обмена.

Если бы не пробелы в имени, можно было бы воспользоваться вот таким примерно кодом:
 
for /f "tokens=3-7" %%B in (1.txt) do (
if /I '%%C%%D%%E%%F'=='usesmodifieddatafile' (for /f "tokens=4-6" %%N in (1.txt) do (
if /I '%%N'=='%%B' (for /f "delims==) tokens=2" %%Y in ("%%P") do (
echo %%Y >> 2.txt)))))
 
Здесь проверяется файл 1.txt, а id выводится в файл 2.txt, но если в нике содержится пробел, то этот код его не отловит.

Всего записей: 83 | Зарегистр. 13-05-2004 | Отправлено: 09:16 17-02-2009
milwaukeeman



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Еще раз говорю. чтоб удалял папку только после нажатия Завершить

Всего записей: 136 | Зарегистр. 17-02-2009 | Отправлено: 16:59 17-02-2009
adam264

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka, nNau, спасибо за ответы. Может нужно использовать команду FINDSTR, там в регулярных выражениях есть "Диапазон: любые символы из указанного диапазона". Т.е. как я понял если мне нужно вытащить "3165452" из строчки (id=3165452), то как диапазон нужно задать символы [=-)]. Только как это в команде писать я не понимаю. То ли FINDSTR /C:[=-)], то ли ещё как. Потом что меня интересует, в этот log.txt будут постоянно добавляться строки во время работы и надо чтобы батник всегда работал с нижней строчкой этого лога (конечно если он будет успевать считывать) и именно там искал, присваивал переменные, выполнял условия, и не трогал верхние уже обработанные строки. Потом по сочетанию "Nick disconnected" удалял переменные, содержащие id и ники. Кстати, каким способом можно найти последнюю строчку текстового файла?
 

Всего записей: 23 | Зарегистр. 15-02-2009 | Отправлено: 19:21 17-02-2009 | Исправлено: adam264, 00:29 18-02-2009
z3r



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а как удалить файл если ему больше месяца?

Всего записей: 91 | Зарегистр. 29-03-2007 | Отправлено: 00:21 18-02-2009
Elroir



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

Цитата:
а как удалить файл если ему больше месяца?

Ты не поверишь, но если файлу больше месяца, то он удаляется точно также, как и тот, которому меньше месяца.    
Давай я попробую догадаться, что имелось в виду - как найти и удалить файлы, которым больше месяца?
Если использовать утилиту forfiles.exe, то так:

Код:
forfiles /D -30 /c "cmd /c if @isdir==FALSE del /q @fname"


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:43 18-02-2009
Maza_Faka



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

Цитата:
каким способом можно найти последнюю строчку текстового файла?

Пример:

Код:
 
@Echo off
 
For /F "usebackq" %%A In (`Type test.txt ^| Find /V /C ""`) Do Set /A LastLine=%%A - 1
More +%LastLine% test.txt
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:34 18-02-2009
z3r



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir именно это и имел ввиду не совсем башка варит в полночь.

Всего записей: 91 | Зарегистр. 29-03-2007 | Отправлено: 10:20 18-02-2009
Fenixs

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не подскажете, как в cmd объединить две строки в переменную.
Есть список файлов, как их объединить в одну строку?

Всего записей: 15 | Зарегистр. 17-06-2006 | Отправлено: 17:30 18-02-2009
Elroir



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

Код:
 
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (list.txt) do set "var=!var! %%a"
echo %var%
 


----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:53 18-02-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenixs
Если sed или gawk есть, то

Код:

sed ":a;N;$!ba;s/\n/ /g"


Код:

gawk "$1=$1" ORS=\t

 
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:56 18-02-2009
Studio13_OutlaW



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так как в батнике прописаны операции с файлами с текущей папке, после создания ярлыка и перемещения его в другую папку, батник перестает работать. Что делать?
 
В принцепи могу создать значение в реестре с путем к папке, если это как то поможет, чтобы батник обращался к реестру и понимал где проводить операции....

Всего записей: 40 | Зарегистр. 04-02-2009 | Отправлено: 16:01 19-02-2009 | Исправлено: Studio13_OutlaW, 22:43 19-02-2009
Fenixs

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
 
Спасибо
@echo off
setlocal enabledelayedexpansion
for %%a in (*.rpl) do set "var=!var!"%%~fa" "
 
igor_andreev
Нету, но всё равно спасибо.

Всего записей: 15 | Зарегистр. 17-06-2006 | Отправлено: 16:57 19-02-2009
SoldatShveik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть проблеммка - хочу прогнать через промт файлы диалогов игры (русификатора 100% нет). Сложность в том, что в файлах соседствуют диалоги и скрипты игры, так что тупо скормить переводчику не получится. На данный момент получилось тока написать батник для того, чтоб "выдрать" диалоги в отдельный файл, отделив от скриптов, при этом была сложность - скрипт затыкался на табуляции в текстовом файле. Как впихнуть рус. перевод вместо англ. (не руками ессно!) и обойти табуляцию - не знаю.
Файлы диалогов в формате *.txt, сами диалоги оформлены в кавычках: Text1="текст", Text2="реплика", причем нумерация Text_i не сквозная.
Если кто сталкивался с подобными вещами (по сути - выборочная замена текста в большом кол-ве файлов путем подстановки из других файлов) - напишите или дайте ссылку, если уже обсуждали. Спасибо.

Всего записей: 3 | Зарегистр. 19-02-2009 | Отправлено: 20:04 19-02-2009
adam264

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

Цитата:
@Echo off  
 
For /F "usebackq" %%A In (`Type test.txt ^| Find /V /C ""`) Do Set /A LastLine=%%A - 1  
More +%LastLine% test.txt

Так не работает.
 
Благо все строки содержат пробелы, число (N) строк нашли так:
find /c " " d:log.txt
1)Как теперь найти N-ую строку?
 
2)Как вытащить из текстового файла только число перед которым стоит знак "=" ?

Всего записей: 23 | Зарегистр. 15-02-2009 | Отправлено: 01:35 20-02-2009
NvvLazyTiger



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
adam264
Цитата:
каким способом можно найти последнюю строчку текстового файла?

Если есть gAwk, то можно сделать так:
Код:
gawk "{};END{print NR,$0}" test.txt

На StdOut будет выдана последняя строка ("$0") файла test.txt. В её начале будет номер ("NR") этой последней строки, отделённый от содержимого пробелом.
 
adam264
Цитата:
Как вытащить из текстового файла только число перед которым стоит знак "=" ?

Например, так:
Подробнее...
NB.#1 На StdOut выводится десятичное целое число после первого вхождения символа "=" (по одному на строку).
NB.#2 Если в строке после указанного вхождения стоит не цифра, то строка пропускается.
 
Update То, что в "Подробнее...", - это одна строка. ;)

Всего записей: 262 | Зарегистр. 14-02-2009 | Отправлено: 07:16 20-02-2009 | Исправлено: NvvLazyTiger, 07:36 20-02-2009
Maza_Faka



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

Цитата:
Так не работает


Цитата:
число (N) строк нашли так

Работает. Вопрос вроде бы звучал так:
Цитата:
каким способом можно найти последнюю строчку текстового файла?

 

Цитата:
Как вытащить из текстового файла только число перед которым стоит знак "=" ?

Попробуй так

Код:
 
sed "s/.*=\([0-9]*\).*/\1/g" < test.txt > out.txt
 

 
 
Добавлено:

Цитата:
Как теперь найти N-ую строку?

Можно так:

Код:
 
sed -n "5p" test.txt>new.txt
 

Выводим в файл 5-ую строку.

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:44 20-02-2009 | Исправлено: Maza_Faka, 07:45 20-02-2009
jonnydram

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, Мастера =)
 
Проблема следующая.  
 
Стоит требование - сделать так, чтобы при входе пользователя на локальный ПК автоматически запускалась 1с без рабочего стола, а при выходе из 1с автоматически завершался сеанс пользователя. Т.е. logoff. По сути - как обычная терминальная сессия с тем лишь условием, что это не терминальная сессия, а просто ПК...
 
Как отключить рабочий стол при загрузке и запустить 1с - нашел.
 

Код:
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Shell" = "путь_к_1С.exe"
 

 
А вот как сделать так, чтобы при закрытии 1с сеанс пользователя на ПК завершался?

Всего записей: 19 | Зарегистр. 20-02-2009 | Отправлено: 08:04 20-02-2009
Maza_Faka



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

Цитата:
как сделать так, чтобы при закрытии 1с сеанс пользователя на ПК завершался?

Что-то вроде этого:

Код:
 
@Echo Off
 
:ProcCheck
ping -n 3 127.0.0.1>Nul
Tasklist | Find /i "process.exe">Nul && GoTo :ProcCheck || GoTo :LogOff
GoTo EOF
 
:LogOff
Shutdown -l -t 10
pause
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 13:54 20-02-2009 | Исправлено: Maza_Faka, 13:56 20-02-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 102 103 104 105 106 107 108

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru