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

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

Автор: wolf0425
Дата сообщения: 09.09.2009 23:18
Psih

Цитата:
не могу понять где допустил ошибку.

ошибка у тебя вот тут:
Цитата:
echo %mess% >> %%i.full
В смысле - это находится внутри головного for и тебе надо было писать !mess!
%mess% - заменяется на значение переменной до входа в самый внешний оператор...

чего-то типа такого
Код: setlocal enabledelayedexpansion
for /R %%i in (*.1) do (
set "mess="
for /F "tokens=*" %%o in ('type %%i') do set "mess=!mess!%%o"
echo !mess! >> %%i.full
rem а что - %%i.full существовали до старта батника? откуда и зачем это дописывание?

for /F "tokens=*" %%u in ('type %%i.full') do net send COMPUTER %%u
rem если %%i.full не существовали - for этот лишний, просто net send COMPUTER !mess!
)
Автор: 01MDM
Дата сообщения: 10.09.2009 00:45
wolf0425

Цитата:
1. он в эту строку еще и имена всех файлов *.1 запишет


Это как? Если только в файле есть строка с его именем.


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


Если каждый файл сделать в одну строку, то:

Код:
@echo off
pushd "folder"
for %%i in (*.1) do (
for /f "tokens=*" %%j in ('type "%%i"') do 0>nul 1>>"%%~nxi.full" set /p=%%j
)
popd
Автор: jaguar21011987
Дата сообщения: 10.09.2009 01:39
Есть такая пороблема: я допустим хочу вывести результаты комманды echo в файл - пишу echo blablabla >> text.txt, но при вызове аналогичной строки новый текст добавляется в файл с новой строки. Вопрос: как сделать, чтобы при новом вызове echo текст добавлялся в конец последней строки, а не начинало новую? Нужно для того, чтобы с помощью одного пакетного файла создать другой, а там параметры должны быть в одну строку.
Автор: wolf0425
Дата сообщения: 10.09.2009 01:58
jaguar21011987

Цитата:
как сделать, чтобы при новом вызове echo текст добавлялся в конец последней строки, а не начинало новую?
надо чтоб эта последняя строка не заканчивалась символом перевода строки.
На данной странице аналогичная тема присутствует в ответах двум людям, например в сообщении прямо перед твоим вопросом.
Автор: jaguar21011987
Дата сообщения: 10.09.2009 03:15
Пасиба, как работает не совсем понял, но пользоваться можно)
Автор: mugil_cephalus
Дата сообщения: 10.09.2009 08:58
wolf0425

Цитата:
Внимательнее будь, и проверяй перед тем как писать.
это - вывод не процитированного перед ним куска кода, а предыдущей версии :kill
от 03:43 08-09-2009 - того где ты про set /p= спрашивал.

А процитированный вариант у тебя должен выводить

Ошибка: Не удается найти процесс "UrlLstCk.exe". сode=128
Успешно: Процесс "realsched.exe", с идентификатором 2080, был завершен.


приношу извинения!

вот вывод:

Ошибка: Не удается найти процесс "UrlLstCk.exe". code=128
Ошибка: Не удается найти процесс "realplay.exe". code=128
Ошибка: Не удается найти процесс "qttask.exe". code=128
Ошибка: Не удается найти процесс "GhostStartTrayApp.exe". code=128


Добавлено:
wolf0425
вот вывод слегка подправленного вашего 3-го скрипта от 17:46 09-09-2009 (пардон, как говорится, за моветон, - не дело ученика поправлять мастера, но не обессудьте - "я не волшебник, я только учусь": не знаю, всегда ли success выдает код "0"

Ошибка: Не удается найти процесс "AppleMobileDeviceService.exe". ErrLvl=128
Ошибка: Не удается найти процесс "msmsgs.exe". ErrLvl=128
Ошибка: Не удается найти процесс "msnmsgr.exe". ErrLvl=128
Ошибка: Не удается найти процесс "NeroCheck.exe". ErrLvl=128
Ошибка: Не удается найти процесс "NMBgMonitor.exe". ErrLvl=128
Ошибка: Не удается найти процесс "SeaPort.exe". ErrLvl=128
Ошибка: Не удается найти процесс "UrlLstCk.exe". ErrLvl=128
Ошибка: Не удается найти процесс "wltuser.exe". ErrLvl=128
Успешно: Процесс "GhostStartService.exe", с идентификатором 1712, был завершен. ErrLvl=0
Успешно: Процесс "GhostStartTrayApp.exe", с идентификатором 2372, был завершен. ErrLvl=0
Успешно: Процесс "GrooveMonitor.exe", с идентификатором 2156, был завершен. ErrLvl=0
Успешно: Процесс "HKML_SRV.exe", с идентификатором 1704, был завершен. ErrLvl=0
Успешно: Процесс "mDNSResponder.exe", с идентификатором 1356, был завершен. ErrLvl=0
Успешно: Процесс "QTTask.exe", с идентификатором 1440, был завершен. ErrLvl=0
Успешно: Процесс "realplay.exe", с идентификатором 2188, был завершен. ErrLvl=0
Успешно: Процесс "realsched.exe", с идентификатором 2128, был завершен. ErrLvl=0

G:\scripts>

СПАСИБО
Автор: wolf0425
Дата сообщения: 10.09.2009 12:54
mugil_cephalus
Цитата:
не обессудьте - "я не волшебник, я только учусь": не знаю, всегда ли success выдает код "0"
Данная конкретна утилита - всегда.
И вообще системные утилиты у Микрософта достаточно хорошо вылизаны и оттестированы.

в подобных утилитах сначала внутри определяется код завершения, а потом в соответствии с ним переключают текст для печати, несоответствия ERRORLEVEL и сообщения просто не получится.

Но если хочется видеть однообразно, с кодом - не вижу проблемы, с вырезанием "лишних" if-else вопросов всегда меньше чем с добавлением
Автор: Psih
Дата сообщения: 10.09.2009 13:42
wolf0425
01MDM
Благодарю!!! Оба способа рабочих!
wolf0425 - ты верно понял суть задачи...

Небольшая просьба пояснить действие следующих команд (просто своими словами поясните что происходит в данных случаях...я запутался с их интерпретацией, но понимаю, что в будущем могут пригодиться вновь):

Код:
set "mess=!mess!%%o"
echo !mess! >> файл.тхт
Автор: mugil_cephalus
Дата сообщения: 10.09.2009 13:44
wolf0425

Цитата:
Но если хочется видеть однообразно, с кодом - не вижу проблемы, с вырезанием "лишних" if-else вопросов всегда меньше чем с добавлением


в войну, студент,.. синус до полутора доходил! (шутка юмора)
Автор: AntoshAReal
Дата сообщения: 10.09.2009 14:10
Такой вот вопрос знающим:

Есть текстовый файл, там написано в каждую строку.
Необходимо после каждой строки делать что-то типо нажатия "Enter" (не знаю как называется).

Подскажите решение (с примером), пожалуйста
Автор: wolf0425
Дата сообщения: 10.09.2009 16:22
Psih
Цитата:
Пытался присваивать !mess! в качестве другой переменной, а затем применял к ней замену:
set mess1=!mess!
set mess1=%mess:q= %
ну для кого я писал, что внутри for - %переменные% лучше не применять, а надо использовать !переменные! ?

Цитата:
как в том цикле в переменной !mess!, которая является суммой строк из одного файла, сделать замену, допустим, символа "q" на пробел

Если замена одна - вторую переменную проще не заводить, просто заменить при использовании
echo !mess:q= ! >> %%i.full
или net send COMPUTER !mess:q= !

Цитата:
и образовать новую переменную, допустим mess1, в которой все указанные символы будут заменены пробелом?
А обязательно новую? можно и старую
set mess=!mess:q= !
set mess=!mess:w= !
set mess=!mess:e= !


Цитата:
Нет, файла там быть не должно...просто я не понял действие этих команд
тогда вместо >> %%i.full нужно было > %%i.full
так файл, если не был потерт ранее - переписался бы поверх, а не добавлена строка в конец.
Если файлы не нужны после окончания батника - то рассылка без создания временных файлов, сразу из переменной, будет посимпатичнее.

Добавлено:
AntoshAReal
Цитата:
Есть текстовый файл, там написано в каждую строку.
Необходимо после каждой строки делать что-то типо нажатия "Enter" (не знаю как называется).
после каждой строки вставить пустую строку?
Если съедание пробелов в начале/конце строк и просто пустых строк не волнует то
Код: cd .>file2.txt
for /f "delims=" %%a in ('type file1.txt ') do (
echo %%a>>file2.txt
echo.>>file2.txt
)
Автор: AntoshAReal
Дата сообщения: 10.09.2009 17:32
wolf0425
"Съедание" пробелов не важно, там их нету (не должно быть, возможно только в самой строке, но не в начале/конце).

Я так понял, что исходный файл, это file1.txt, а file2.txt это полученный с изменениями.

Но всё равно, что-то не пашет, создаётся file2.txt и в нём ничего нету, может я что-то недопонял?


P.S.
Не знаю, правильно сделал или нет, но удалил "do" в строке:
for /f "delims=" do %%a in ('type file1.txt') do (
стало так:
for /f "delims=" %%a in ('type file1.txt') do (


вроде заработало как надо.
Автор: SANIOK_AV
Дата сообщения: 10.09.2009 17:40
Доброго времени суток!
такой вопрос:
хочу в батнике реализовать запуск от имени и чтоб пароль передавался автоматом
пробую так:

Код: echo 123 | runas /env /user:admin notepad.exe
Автор: AntoshAReal
Дата сообщения: 10.09.2009 18:28
SANIOK_AV
может вот эта страничка поможет?
http://www.winblog.ru/2006/12/12/12120603.html
Автор: wolf0425
Дата сообщения: 10.09.2009 18:53
SANIOK_AV в начале месяца мелькала ссылка

Автор: Alukardd
Дата сообщения: 10.09.2009 19:23
SANIOK_AV
посмотри 2 страницы назад.. я совсем недавно писал - внизу 41страницы, но для тебя повторюсь

echo пароль | runas /netonly /user:workgroup\user "shutdown /s /m \\xxx.xxx.xxx.xx"
rem переназначение стандартного вывода программы 'echo' на стандартный ввод программы 'runas'

runas /netonly /user:workgroup\user "shutdown /s /m \\xxx.xxx.xxx.xx" <текстовый_файл_с_паролем
rem переназначение стандартного ввода программы 'runas'

З.Ы. сам еще так и не проверил, голова другим занята. и без этого завал с сеткой(
Автор: Psih
Дата сообщения: 10.09.2009 20:24
wolf0425


Цитата:
ну для кого я писал, что внутри for - %переменные% лучше не применять, а надо использовать !переменные! ?

Все, теперь уж точно запомню на всю оставшуюся жизнь


Цитата:
или net send COMPUTER !mess:q= !

Ты, наверное, не поверишь, но пробовал этот способ......вот только почему-то он не сработал сразу, поэтому и стал возиться с вводом других переменных и прочей мишурой, что было еще более неправильно, судя по твоим словам выше Но раз ты написал именно так, то попробовал повторно - в этот раз все удачно! Уж не знаю, где я накосячил, когда сам делал тоже самое СПАСИБИЩЕ огромное!!!


Цитата:
Если файлы не нужны после окончания батника - то рассылка без создания временных файлов, сразу из переменной, будет посимпатичнее.

Эт я понял, но нужно именно наличие такового файла, т.к. дальше он идет в обработку на другом компьютере. Я не стал излагать полную задачу и писать весь текст кода, чтобы не заморачивать вам голову лишней ерундой, а заострить внимание именно на нужном.

Еще раз выражаю свою благодарность!
Автор: PALbICH
Дата сообщения: 11.09.2009 08:53
Добрый день.
Подскажите плиз, как в батнике организовать авторизацию при копировании файла с другого компа в локальной сети. К примеру батник выполняет операцию

copy \\Comp1\share\test.txt c:\temp\

Для доступа к Comp1 необходимо авторизоваться.
Без авторизации копирование не проходит. Но если перед этим с помощью проводника Windows один раз зайти в папку \\Comp1\share\, введя логин и пароль, то потом батник отрабатывает нормально.

Чтобы избежать необходимости открытия ресурса вручную перед запуском бат-файла, хочется организовать процедуру авторизации в батнике. Как это сделать?
Автор: wolf0425
Дата сообщения: 11.09.2009 09:17
PALbICH, недавно такое же обсуждали
Цитата:

Так просто имя диска в команде не указываешь
net use "\\192.168.0.1\1c" /user:login password


Автор: mugil_cephalus
Дата сообщения: 11.09.2009 10:20
wolf0425, толковый человек, - меж строк [скрипта ] - видно, что толковый, как написать батник, чтоб именно при doubleclick мышью по нему (а не при вводе его имени в окне консоли), он начинал работу в интерактивном режиме и не пропадал (если батник длинный, и cmd /k & x & y & z etc. не подходит), а то у меня все строчки скрипта после cmd /k - игнорируются.

Автор: wolf0425
Дата сообщения: 11.09.2009 13:15

Цитата:
он начинал работу в интерактивном режиме и не пропадал

в смысле - после завершения чтоб окно консоли оставалось?
да влепи в последнюю строчку pause & exit 0

или чего-то другое хочешь?


Цитата:
а то у меня все строчки скрипта после cmd /k - игнорируются
так вроде cmd /k и задумано?
Чего ты от него хотел получить то?
Автор: mugil_cephalus
Дата сообщения: 11.09.2009 14:34
wolf0425

Цитата:
в смысле - после завершения чтоб окно консоли оставалось?

да

Цитата:
да влепи в последнюю строчку pause & exit 0

только в последнююю? а в первую?

Цитата:
так вроде cmd /k и задумано?
Чего ты от него хотел получить то?

cmd /K - Выполнение указанной команды (строки) без последующего завершения.
то есть не только cmd /k и команда/ы в одной строке, но и продолжение выполнения команд этого батника далее на нижеследующих строках....

хотел чтобы батник после cmd /k дальше проодолжал работу и команды (не echo, а вывод) батника были видны на экране (кроме, >null), а в конце батник не закрывался, а висело окно консоли с приглашением, - тобишь в интерактивном режиме

все, что я смог "смастерить":
tskklLst7.bat:
@echo off
rem cls
%1 %2
echo cmd /k tskklLst7 goto bypass > tskklLst7_run.bat
tskklLst7_run
:bypass
del /q tskklLst7_run.bat
taskkill /F /IM HKML_SRV.exe
............

но может есть какая-то команда или ключ, чтоб вбить вначале пакетника и "мама не горюй..."
Автор: wolf0425
Дата сообщения: 11.09.2009 16:20
mugil_cephalus

Цитата:
только в последнююю? а в первую?
А в первую-то зачем? чего там то ждать надо? там батник наверно должен начать команды какие-то выполнять, а не ждать пока ты проснешься
Цитата:
cmd /K - Выполнение указанной команды (строки) без последующего завершения.
то есть не только cmd /k и команда/ы в одной строке, но и продолжение выполнения команд этого батника далее на нижеследующих строках....
про продолжение выполнения команд этого батника - ты придумал сам, в тексте этого нет.
cmd /k какая-то-команда
запустит новую копию cmd c новой копией переменных, выполнит эту какую-то-команду и будет ждать ввода команды exit для выхода из этой копии cmd и передачи управления в родительский cmd, который и продолжит выполнение следующей за cmd /k строки.


Цитата:
все, что я смог "смастерить":
@echo off
rem cls
%1 %2
интересно откуда возьмутся %1 %2 если ты запускаешь его doubleclick мышью?



Автор: SANIOK_AV
Дата сообщения: 11.09.2009 16:30
AntoshAReal
wolf0425
Alukardd
всем большое спасибо за информацию...
постепенно разбераюсь...))
пробую:

Код: echo пароль | runas /netonly /user:admin regedit.exe
Автор: mugil_cephalus
Дата сообщения: 11.09.2009 16:30
wolf0425

Цитата:
интересно откуда возьмутся %1 %2 если ты запускаешь его doubleclick мышью?

у меня работает - ты сам попробуй
при первом запуске doubleclick мышью: %1 и %2 игнорируются, а далее tskklLst7_run.bat запускает tskklLst7.bat с аргументами goto и bypass
Автор: SANIOK_AV
Дата сообщения: 11.09.2009 16:33
wolf0425

Цитата:
в начале месяца мелькала ссылка

по поводу шифрования батников ?
Автор: mugil_cephalus
Дата сообщения: 11.09.2009 16:38
wolf0425
я пытаюсь получить результат:

doubleclick мышью 1.bat:

@echo off
cmd /k
команда1
..........
командаN
C:\>
(консольное окно висит, не пропадает, в интерактиве)
Автор: Toliman
Дата сообщения: 11.09.2009 21:45
doubleclick мышью 1.bat:

@echo off
cmd /k
команда1
..........
командаN
C:\>
Автор: wolf0425
Дата сообщения: 12.09.2009 01:24

Цитата:
по поводу шифрования батников ?
по поводу cpau, adminlink, execas
которая то позволяет админу разрешить рядовому пользователю запускать программы (из списка) от имени другого пользователя (например админа) не зная пароля.

mugil_cephalus
Цитата:
(консольное окно висит, не пропадает, в интерактиве)
не висит а ожидает ввода команды, например exit.

Цитата:
я пытаюсь получить результат:
doubleclick мышью 1.bat:
@echo off
cmd /k
команда1
это не результат, это бред - команда cmd /k останавливает выполнение батника до своего завершения. которое делается ручным вводом exit
Если ты именно этого и хочешь добиться - вставь ее в конец батника и будет тебе щастье.
Автор: mugil_cephalus
Дата сообщения: 12.09.2009 11:45
wolf0425

Цитата:
это не результат, это бред - команда cmd /k останавливает выполнение батника до своего завершения. которое делается ручным вводом exit
Если ты именно этого и хочешь добиться - вставь ее в конец батника и будет тебе щастье.


например, start->run->cmd ввожу help и результат "висит" и окно не "пропадает". Нужно, чтоб вошел в explorer'e в папку, doubleclick мышью батник и он пошел выволнятся, и дошел до конца пакетирования, а потом "и результат "висит" и окно не "пропадает"". Только код/команда/ключ хотел вбить вначале script'a батника.
Я такого результата могу добится только при помощи второгоо батника - например,
x_run.bat со скриптом: cmd /k x.bat. Doubleclick мышью по x_run.bat и "поехал" x.bat (и результат у x.bat'a будет "висеть" (когда он достигнет конца) и окно x.bat'a "не пропадет"). Такая же ситуация с taskkill list'om - чтоб не читать логи, сразу на экране консоли посмотрел результат и закрыл.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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