Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: duh_S
Дата сообщения: 20.04.2010 16:07
подскажите плз:

Код:
set ThisCmdDir=%~dp0
for /F "tokens=*" %%i in ('dir C:\ /s/b ^| find "ACCOUNT.VCF"') do set path_ACCOUNT_VCF=%%i

Set Key=@mail.ru
For /F "usebackq delims=" %%i in (`Find /I "%Key%" %path_ACCOUNT_VCF%`) Do Set Value=%%i
@Echo.%Value%
Автор: mugil_cephalus
Дата сообщения: 20.04.2010 16:24
Free_Soft

Цитата:
Ребята, как можно поменять значок (иконку) в заголовке окна консоли?

ярлык сделай на cmd.exe и в св-вах ярлыка
Автор: mediate
Дата сообщения: 20.04.2010 16:35
wolf0425, mugil_cephalus, СПАСИБО БОЛЬШОЕ!

воспользовался кодом mugil_cephalus. Только не понял в этом месте:

echo.%%~i|1>nul 2>&1 find /i "tables=" &&(echo.tables=%var%) ||(echo.%%~i)

у меня создался файл со строчкой через запятую, но там нет текста tables= - так и должно быть?
Автор: mugil_cephalus
Дата сообщения: 20.04.2010 16:48
mediate
вот мой файл 3.txt
MOP
LOST
HIGH
LOW
вот 3_.txt
MOP, LOST, HIGH, LOW
вот batch.cmd
ACTS
ACTSVOLS
ADDR
ADDRFOLD
ADDRRECIP
tables=a
ACTS
ACTSVOLS
ADDR
ADDRFOLD
ADDRRECIP
вот batch_.cmd
ACTS
ACTSVOLS
ADDR
ADDRFOLD
ADDRRECIP
tables=MOP, LOST, HIGH, LOW
ACTS
ACTSVOLS
ADDR
ADDRFOLD
ADDRRECIP
Автор: mediate
Дата сообщения: 20.04.2010 16:52
mugil_cephalus, спасибо. Методом тыка разобрался с 5 попытки куда и что, я не создавал cmd - потом создал и все получилось, большое спасибо еще раз, помогли ребята!
Автор: mugil_cephalus
Дата сообщения: 20.04.2010 16:57
Free_Soft
sic, любопытная получилась консоль с пиктограммой в виде аватара с форума
Автор: mediate
Дата сообщения: 20.04.2010 17:17
mugil_cephalus, вопрос еще появился - файлик создается с одной большой строкой - открываю виндовским нотпадом - нет переноса слов, но строк 3 штуки (названий через запятую много достаточно), обрывается на NOMENCLA и со след. строки TURE и дальше через запятую перечисления идут.

И новый batch_.cmd создается с этим обрубком первой строки -т.е. там tables=...., NOMENCLA - и все, как быть? как снять ограничения на длину?


Код: tables=A, AA, ACTS, ACTSVOLS, ADDR, ADDRFOLD, ADDRRECIP, AGENTS, ARCHIVEFUNDS, ARCHIVEMOVEMENT, ARCHIVERS, ATTRIB, AUTONUM, BLANKS, BLANKS_DELIVERY, BLANK_DOCS, BOARD_ACL, BOSS_ASSISTANT, BRIEFCASE, CALENDAR, CAMERAS, CARDINCARDVAL, CARDLINK, CARDPAGES, CARDS, CARDS_ACCESS, CARDS_BODY, CARDS_EDIT, CARDS_FOLDERS, CARDS_OLE, CARDS_REPORTS, CARDTARIF, CARDTARIFGRID, CARDTEMPLATE, CARDVAL, CATEGORY, CHAPTER, CHECKINCHECKOUT, CHIEFS_DEPS, CONFIG, CTRL_MSG, CTRL_OWNER, DOCLOG, DOCSIGN, DOCSNOMS, DOCUMENT, DOCUMENT_CTRL, DOC_DISPATCH, DOC_HIST, DSBINDER, DSDATA, DSFOLDER, EMPLOYEE, EMPL_CHIF_DEPT, EVENTLOG, EVENTLOGDETAIL, EXECUTIONREPORTS, EXECUTOR, FATHERFIELD, FGL, FIELDLIST, FILEBALANCE, FILTERS, FLIST, FOLDER, FOLDERLEVEL, FOLDER_AD, FOLDER_CARD, FOLDER_LEVELS, FOLD_EDIT, FOLD_EMPL, FOLD_MESSAGE, FOLD_PROF, FREE_SCRIPTS, FULLDOCPATH, GL, GROUP_ADDRESS, GROUP_FOLDER, GROUP_LIST, IERARCH, INDEXBASE, INDEXPATHS, INSP_FOLDERS, INSTATTACH, INSTINSPECTORS, INSTRUCTIONS, JOURNAL, LINKCOLUMN, LINK_TEXT, MSGTEMPLATE, NOMENCLA
Автор: wolf0425
Дата сообщения: 20.04.2010 18:13

Цитата:
как присвоить переменной (выделить из %%i получившейся строки) все что находится левее %Key% но до первого же символа ":"
наверно так:

Код: Set Key=@mail.ru
setlocal enabledelayedexpansion
For /F "usebackq delims=" %%i in (`Find /I "%Key%" %path_ACCOUNT_VCF%`) Do Set "Value=%%i" & for /f "delims=:" %%j in ("!Value:%Key%=:!") do set "Value=%%j"
@Echo.%Value%
Автор: king_stiven
Дата сообщения: 20.04.2010 18:20
mediate

Цитата:
Даже, если подскажете как фалик со строкой одной создать

ещё способ

Код: FOR /F "tokens=* delims=" %%a IN (files.lst) DO SET /p=+"%%~a"<nul>>result.txt
Автор: wolf0425
Дата сообщения: 20.04.2010 20:06
mediate
Цитата:
как снять ограничения на длину?
для упрощения кода чуть поменял промежуточную строку

Код: @echo off
for /f "tokens=*" %%i in (.\in.txt) do 0>nul 1>.\string.txt set /p="table=%%~i" & goto:loop
:loop
for /f "skip=1 tokens=*" %%i in (.\in.txt) do 0>nul 1>>.\string.txt set /p=", %%~i"
1>>.\string.txt echo.
for /f "tokens=*" %%i in ('type ".\batch.cmd"') do (
    echo.%%~i | 1>nul 2>&1 find /i "tables=" && ( 1>>.\batch_new.cmd type .\string.txt) || (1>>.\batch_new.cmd echo.%%~i)
)
pause
Автор: mediate
Дата сообщения: 20.04.2010 21:02
wolf0425, king_stiven, спасибо, помогли - создается все верно теперь!

Автор: freewood
Дата сообщения: 20.04.2010 21:10
Имеется такой вопрос. Как правильно записать деление с остатком в команде SET?

Код: set /a x=a%b
Автор: yurkesha
Дата сообщения: 20.04.2010 21:17
freewood
а так не хочешь:
Код: set /a "x=a-a/b*b"
Автор: freewood
Дата сообщения: 20.04.2010 21:20
Нет, так не хочу. =)
Мне просто любопытно почему не работает хотя должно. =)

Код: set /a "x=a-a/b*b"
Автор: yurkesha
Дата сообщения: 20.04.2010 21:29
freewood
Хорошо. Но так как ты хочешь еще некрасивее получится:
Код: SET /a "x=%a%%%b%"
Автор: freewood
Дата сообщения: 20.04.2010 21:33
Т.е. запись должна быть именно в таком виде, с предопределением переменных a и b?
А вот так сделать нет возможности?

Код: set /a "x=3%5"
Автор: yurkesha
Дата сообщения: 20.04.2010 21:42
freewood
Ну одинарный процент "съедается" по способу обработки - там допустимо использование переменных окружения без обрамления этими символами... Стандартная экранировка символом "^" почему-то не отрабатывает. Ну вобщем сделай "ECHO ON" и посмотри как транслируется команда в процессе выполнения.
А первый приведенных вариант работает по простой причине:
- все вычисления выполняются последовательно с учетом приоритета обработки операций
- все вычисления целочисленные
Автор: lorents
Дата сообщения: 21.04.2010 16:34
Добрый день!
[more]
Код: @ECHO OFF
MKDIR GIFLITE.$$$ 2>nul
REM Основной цикл обработки файлов GIF
FOR /R %%N IN (*.gif) DO @CALL :method %%N
REM Удаляем весь мусор, который мог остаться
DEL /Q giflite.tmp 2>nul
RMDIR /S /Q GIFLITE.$$$
EXIT
:method
REM Перебираем методы
FOR %%M IN (0 1 2 3) DO @CALL :giflite %%M %%~s1 %1
REM Сортируем полученное по размеру и забираем последний
REM (наименьший) файл
FOR /F "usebackq skip=3" %%R IN (`DIR /B /O-S GIFLITE.$$$`) ?
DO @CALL :getresult %%R %1
GOTO :EOF
:getresult
REM Переписываем файл на место прежнего, удаляем мусор
MOVE /Y GIFLITE.$$$\%1 %2
DEL /Q GIFLITE.$$$\*.*
GOTO :EOF
:giflite
REM Запускаем преобразование
GIFLITE.EXE -t -h -m%1 -o %2 GIFLITE.$$$\%1
Автор: wolf0425
Дата сообщения: 21.04.2010 16:44

Цитата:
1. как сделать, чтобы код понимал кирилицу;
а какое место кода её не понимает то?


Цитата:
2. у меня GIFLITE.EXE открывается на все окно, как можно сделать чтобы открывалось не на все окно;

попробуй заменить вызов на start ''" /wait /min GIFLITE ...


Цитата:
3. у меня не работает, где надо переписать файл на место прежнего и удалить мусор.

проверь что у тебя строки не побились, FOR там выглядит крайне подозрительно.
и когда постишь код - не ленись обрамлять в [ code][ /code]
Автор: lorents
Дата сообщения: 21.04.2010 18:26

Цитата:
а какое место кода её не понимает то?

если в адресе (путь к gif картинкам или к GIFLITE.EXE) есть кириллица то код просто не запускается

Цитата:
попробуй заменить вызов на start ''" /wait /min GIFLITE ...

не помогло, просто приложение свернуто,и к тому же пока не восстановишь не работает

Цитата:
проверь что у тебя строки не побились, FOR там выглядит крайне подозрительно.

там все нормально

Высылаю сам батник и программу
http://webfile.ru/4441412
Автор: Free_Soft
Дата сообщения: 21.04.2010 19:03
Кто знает, можно ли как-нибудь через командную строку запросить права Администратора?
Заранее спасибо
Автор: wolf0425
Дата сообщения: 21.04.2010 19:10

Цитата:
если в адресе (путь к gif картинкам или к GIFLITE.EXE) есть кириллица то код просто не запускается
гонишь ты, все запускается.
Хотя сохранять код в 1251 кодировке и не прописывать chcp 1251 - это обычно некомильфо.


Цитата:
не помогло,
да, как-то настолько запущенного случая я не предполагал. Похоже программа напрямую щелкает разрешением видеокарты, и -t ей не указ.


Цитата:
там все нормально
да где ж нормально?

Код: FOR /F "usebackq skip=3" %%R IN (`DIR /B /O-S GIFLITE.$$$`) ?
DO @CALL :getresult %%R %1
Автор: cluster
Дата сообщения: 21.04.2010 20:37
Хочу удалять при старте системы ветку реестра:

Код: START /MIN REG DELETE HKU\.DEFAULT\Software\poolser /F
Автор: lorents
Дата сообщения: 21.04.2010 21:44
wolf0425


Цитата:
Хотя сохранять код в 1251 кодировке и не прописывать chcp 1251 - это обычно некомильфо.

у меня ни к какую не хочет работать

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

прошу прошения не заметил

Цитата:
да, как-то настолько запущенного случая я не предполагал. Похоже программа напрямую щелкает разрешением видеокарты, и -t ей не указ.

выходит ни как нельзя это исправить?
Автор: wolf0425
Дата сообщения: 22.04.2010 01:47

Цитата:
у меня ни к какую не хочет работать

так пример то будет - что конкретно проверял, что получил, что ожидал?

Автор: lorents
Дата сообщения: 22.04.2010 07:10
wolf0425
Выдает вот что

Автор: duh_S
Дата сообщения: 22.04.2010 10:20

Цитата:
Цитата:как присвоить переменной (выделить из %%i получившейся строки) все что находится левее %Key% но до первого же символа ":"

наверно так:

Код:Set Key=@mail.ru
setlocal enabledelayedexpansion
For /F "usebackq delims=" %%i in (`Find /I "%Key%" %path_ACCOUNT_VCF%`) Do Set "Value=%%i" & for /f "delims=:" %%j in ("!Value:%Key%=:!") do set "Value=%%j"
@Echo.%Value%


не робит, выводит

Код: !Value
Автор: wolf0425
Дата сообщения: 22.04.2010 10:48

Цитата:
не робит, выводит
ну пиши строку, которую надо разобрать, и копипастом свой код - у меня то тест проходит, а такой результат код выдавать вообще не должен.

Кстати, у тебя в примере ещё пара шероховатостей - пробелы после @mail.ru и лишние строки в выдаче поиска. правильно писать надо
Set "Key=@mail.ru"
и For /F "delims=" %%i in ('Find /I "%Key%" ^< %path_ACCOUNT_VCF%')
Автор: Iacoyn
Дата сообщения: 22.04.2010 11:18

Цитата:
Хочу удалять при старте системы ветку реестра:

Код:START /MIN REG DELETE HKU\.DEFAULT\Software\poolser /F
Но почему-то команда выполняется несвёрнутым в панель задач окошком.


Можно проще - в реестре исправить
с
[HKEY_CLASSES_ROOT\regfile\shell\open\command]
@="regedit.exe \"%1\""
на
[HKEY_CLASSES_ROOT\regfile\shell\open\command]
@="regedit.exe /s \"%1\""
и прсто бросить в автозагрузку reg файл
REGEDIT4

[-HKEY_USERS\.DEFAULT\Software\poolser]
и вуаля. Ничего моргать не будет.
Автор: 0Vovan0
Дата сообщения: 22.04.2010 14:04
Можно ли в винХР с её штатными утилитами реализовать аналог никсового
"ps ax | grep '$command' "
но обязательно с учетом параметров переданных процессу при запуске (т.е. мне надо проверить висит ли в памяти например "php.exe myscript.php " , а tasklist.exe похоже умеет выводить только имя екзешника, без параметров)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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