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

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

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

Автор: z3r
Дата сообщения: 17.02.2009 23:21
а как удалить файл если ему больше месяца?
Автор: Elroir
Дата сообщения: 17.02.2009 23:43
z3r

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

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

Код: forfiles /D -30 /c "cmd /c if @isdir==FALSE del /q @fname"
Автор: Maza_Faka
Дата сообщения: 18.02.2009 06:34
adam264

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

Пример:

Код:
@Echo off

For /F "usebackq" %%A In (`Type test.txt ^| Find /V /C ""`) Do Set /A LastLine=%%A - 1
More +%LastLine% test.txt
Автор: z3r
Дата сообщения: 18.02.2009 09:20
Elroir именно это и имел ввиду не совсем башка варит в полночь.
Автор: Fenixs
Дата сообщения: 18.02.2009 16:30
Не подскажете, как в cmd объединить две строки в переменную.
Есть список файлов, как их объединить в одну строку?
Автор: Elroir
Дата сообщения: 18.02.2009 17:53
Fenixs

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (list.txt) do set "var=!var! %%a"
echo %var%
Автор: igor_andreev
Дата сообщения: 18.02.2009 18:56
Fenixs
Если sed или gawk есть, то

Код:
sed ":a;N;$!ba;s/\n/ /g"
Автор: Studio13_OutlaW
Дата сообщения: 19.02.2009 15:01
Так как в батнике прописаны операции с файлами с текущей папке, после создания ярлыка и перемещения его в другую папку, батник перестает работать. Что делать?

В принцепи могу создать значение в реестре с путем к папке, если это как то поможет, чтобы батник обращался к реестру и понимал где проводить операции....
Автор: Fenixs
Дата сообщения: 19.02.2009 15:57
Elroir

Спасибо
@echo off
setlocal enabledelayedexpansion
for %%a in (*.rpl) do set "var=!var!"%%~fa" "

igor_andreev
Нету, но всё равно спасибо.
Автор: SoldatShveik
Дата сообщения: 19.02.2009 19:04
Есть проблеммка - хочу прогнать через промт файлы диалогов игры (русификатора 100% нет). Сложность в том, что в файлах соседствуют диалоги и скрипты игры, так что тупо скормить переводчику не получится. На данный момент получилось тока написать батник для того, чтоб "выдрать" диалоги в отдельный файл, отделив от скриптов, при этом была сложность - скрипт затыкался на табуляции в текстовом файле. Как впихнуть рус. перевод вместо англ. (не руками ессно!) и обойти табуляцию - не знаю.
Файлы диалогов в формате *.txt, сами диалоги оформлены в кавычках: Text1="текст", Text2="реплика", причем нумерация Text_i не сквозная.
Если кто сталкивался с подобными вещами (по сути - выборочная замена текста в большом кол-ве файлов путем подстановки из других файлов) - напишите или дайте ссылку, если уже обсуждали. Спасибо.
Автор: adam264
Дата сообщения: 20.02.2009 00:35
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)Как вытащить из текстового файла только число перед которым стоит знак "=" ?
Автор: NvvLazyTiger
Дата сообщения: 20.02.2009 06:16
adam264
Цитата:
каким способом можно найти последнюю строчку текстового файла?

Если есть gAwk, то можно сделать так:
Код: gawk "{};END{print NR,$0}" test.txt
Автор: Maza_Faka
Дата сообщения: 20.02.2009 06:44
adam264

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


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

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



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

Попробуй так

Код:
sed "s/.*=\([0-9]*\).*/\1/g" < test.txt > out.txt
Автор: jonnydram
Дата сообщения: 20.02.2009 07:04
Добрый день, Мастера =)

Проблема следующая.

Стоит требование - сделать так, чтобы при входе пользователя на локальный ПК автоматически запускалась 1с без рабочего стола, а при выходе из 1с автоматически завершался сеанс пользователя. Т.е. logoff. По сути - как обычная терминальная сессия с тем лишь условием, что это не терминальная сессия, а просто ПК...

Как отключить рабочий стол при загрузке и запустить 1с - нашел.


Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Shell" = "путь_к_1С.exe"
Автор: Maza_Faka
Дата сообщения: 20.02.2009 12:54
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
Автор: adam264
Дата сообщения: 20.02.2009 19:44
Maza_Faka, не принимай близко к сердцу, я не сомневаюсь в твоих знаниях. Возможно у меня не работает потому что я использую только стандартный набор команд которые присутствуют у меня в Windows. Моё изучение этого материала началось со 102-ой страницы этой темы, так что заранее прошу простить мне мои ошибки.

Правильно ли я понимаю, что если например у другого человека не будут установлены GNU утилиты для win32 с помощью которых написан батник, то возможно программа у него не пойдёт?
Автор: Maza_Faka
Дата сообщения: 21.02.2009 05:46
adam264

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

Да, если нет вышеуказанных утилит, то код работать не будет.
Автор: SoldatShveik
Дата сообщения: 21.02.2009 10:17
Доброго времени суток!
Подскажите:
1. как в цикле for /f в качестве delims задать кавычки (")
2. как выборочно заменить текст одного файла текстом из другого (в частности - только текст, ограниченный кавычками)
Автор: redson
Дата сообщения: 21.02.2009 17:40
Всем привет!
Есть проблема:
консольный rar почему то не добавляет подкаталоги в создоваемый архив
Вот моя cmd-ка:
rar m[f] -agMMM-DD-HH-MM users_ -s -m5 D:\docs\users\
В каталоге D:\docs\users\ - находятся папки пользователей, они почему то не попадают в архив.
Автор: Kilyan
Дата сообщения: 21.02.2009 18:02
redson
Попробуй с ключем -r
rar m[f] -agMMM-DD-HH-MM users_ -r -s -m5 D:\docs\users\
Автор: redson
Дата сообщения: 21.02.2009 19:18
Kilyan огромное спасибо!

Сразу не заметил, оказывается удалились все папки из каталога D:\docs\users\
Автор: Kilyan
Дата сообщения: 21.02.2009 19:24
redson
НУ естесно! -у тя ж ключь то m[f] - перемещение.
Автор: redson
Дата сообщения: 21.02.2009 19:26
а какое решение может быть еще?

Добавлено:

Цитата:
redson
НУ естесно! -у тя ж ключь то m[f] - перемещение.


Я так и задумывал, т.е переместить только файлы [f], а папки пользователей оставить
Автор: BorlandIMHO
Дата сообщения: 21.02.2009 20:13
redson, а почитать справку по ключам архиватора - религия не позволяет?

Цитата:

m[f] Переместить в архив [только файлы].

После успешного завершения операции архивирования добавленные в
архив файлы и каталоги удаляются с диска. При использовании
модификатора 'f' и/или ключа '-ed' будут удалены только
файлы, а каталоги (пустые) останутся на диске.

rar mf -agMMM-DD-HH-MM users_ -r -s -m5 D:\docs\users\
Модификатор "f" не надо заключать в квадратные скобки.
Ещё можно попробовать ключ -ed...
Автор: Maza_Faka
Дата сообщения: 22.02.2009 06:21
SoldatShveik

Цитата:
1. как в цикле for /f в качестве delims задать кавычки (")

Как вариант создать копию файла с заменой двойных кавычек - одинарными. Для замены можно использовать sbs2.com


Цитата:
2. как выборочно заменить текст одного файла текстом из другого (в частности - только текст, ограниченный кавычками)

SED, GREP?
Автор: rBBWYwg
Дата сообщения: 23.02.2009 14:28
Уважаемые, прошу помощи по такому вопросу:

Имеем многоуровневую развитую структуру директорий "Главная-подчиненные". Например,

GENERALFOLDER
|_FOLDER-1
|_FOLDER-11
|_FOLDER-111
|_FOLDER-1111
|_FOLDER-1112
...
|_FOLDER-112
...
|_FOLDER-2
...

и т.д.
Количество подчиненных директорий не фиксировано.
Есть ли способ написать батник, который бы перемещал все файлы поддиректорий в их корневую папку? То есть, все файлы из любых поддиректорий папки FOLDER-1 перемещались бы в FOLDER-1, все файлы поддиректорий из FOLDER-2 перемещались бы в FOLDER-2, так же с FOLDER-3 и т.д.
При этом, необходимо избежать переписывания файлов при совпадений их имен, а оригинальными именами файлов можно жертвовать, но не расширениями.
Автор: anatolus
Дата сообщения: 23.02.2009 16:21
Как средствами windows при полощи командной строки сделать следующее:
проверить пингами (раз в 2 минуты скажем) связь с серваками (например, ya.ru ) и если все 10 запросов на пинги без ответа, то разорвать VPN и потом спустя 10-30 сек. запустить Vpn заново и все это зациклить. Плюс чтобы можно было при помощи этого батника сделать автозапуск vpn (про rasdial я знаю, а вот как сделать все остальное нет )
Автор: Elroir
Дата сообщения: 23.02.2009 16:48
rBBWYwg
Что нибудь вроде такого:

Код:
@echo off
for /d %%a in (*.*) do (
pushd "%%a"
for /f "tokens=*" %%b in ('dir /s /a-d /b 2^>nul') do call :smartMove "%%b"
popd
)
goto :EOF
:smartMove
set "name=%~n1"
set "newName=%~n1"
set "ext=%~x1"
set "count=0"
:try
if exist "%newName%%ext%" (call :nextName & goto try)
move "%~1" "%newName%%ext%"
goto :EOF
:nextName
set /a "count+=1"
set "newName=%name%_%count%"
Автор: Intexid
Дата сообщения: 24.02.2009 00:05
Как определить, содержит ли произвольная папка хотя бы одно вложение, например, другую пустую папку или она ничего не содержит?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


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