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

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

Автор: igor_andreev
Дата сообщения: 20.05.2007 16:28
Кстати про Herbert-a Kleebauer-a. Я иногда копипастю его варианты батников из всяких news-групп, вот, что сейчас нашел у себя, сюда положу hk_batch.zip (24 Кб)
А то там в шапке только его sbs2.com. Описание к каждому батнику лениво делать, сами разберетесь. Но варианты интересные, типа раскрашивания текста в консоли, или батник, который при нажатии BackSpace вводимый пароль показывает звездочками, файл разрезать на части, его манипуляции с датами... В общем, кто не читает alt.msdos.batch, alt.msdos.batch.nt - качните, поприкалывайтесь
Автор: Maza Faka
Дата сообщения: 20.05.2007 17:24
Angel_Ka

Цитата:
А вот это опять не ясно

Говоря простым языком:
создаём bat-файл
удаляем несуществующую переменную
set a= (здесь происходит ошибка, так, как переменная не была ранее определена)
смотрим код ошибки
echo %errorlevel% (он равен "1", всё правильно)
создаём переменную
set a=1 (здесь команда завершилась успешно, значит %errorlevel% должен равнятся "0")
смотрим код возврата
echo %errorlevel% (выдаёт "1", хотя должен выдать "0")
что произошло? а произошло, то, что bat-файл игнорирует успешные команды с переменной "SET" и везде будет выдавать код с номером 1

Проделай то же самое, только переименуй *.bat в *.cmd - и сценарий будет выдавать коды возврата для каждой команды в соответствии с тем, как выполнилась команда, то есть если успешно, то "0", если нет, то "1"

Надеюсь понятно обьяснил...
Ты это...что не понятно, не стесняйся, спрашивай.
Автор: Elroir
Дата сообщения: 20.05.2007 17:38
Angel_Ka

Цитата:
Так... Молчание - золото. Типа: "отвяжись, дура, а то уже пятый час". Ну что ж. По домам.


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

Добавлено:

Цитата:
в .CMD будут устанавливать код ошибки (errorlevel) независимо от того, произошла какая-либо ошибка при работе или нет.

Эту фразу следует понимать так - если команда завершилась без ошибок, CMD установит код возврата 0 (чти и означает без ошибок), если была ошибка - CMD установит код этой ошибки. BAT, если команда завершилась без ошибок, ничего устанавливать не будет, то есть errorlevel будет равен тому, что установила предыдущая команда закончившаяся с ошибкой. А как это работает в примере igor_andreev-а, описал Maza Faka.
Автор: wolf0425
Дата сообщения: 20.05.2007 21:50
может кто посоветет консольную утилиту поиска/замены текста в файле (с регэкспами), правильно понимающую русский текст в win-1251?
правильно - это к примеру считающую русские буквы частью \w и обрабатывающую их апперкейсы однотипно с английскими.

то ли sed из unixutils туп и такого принципиально не понимает, то ли я напрочь не понимаю как ему объяснять...

ps: чтение параметров поиска/замены из файла - наверно тоже обязательное условие.
Автор: Nagual
Дата сообщения: 20.05.2007 22:11
SBReplacer 1.59 (13 Kb!) Программа для замены (удаления) текста в группе текстовых файлов, выбранных по маске, начиная с указанной папки. Использование списка замен. Встраивание в контекстное меню папок. Drag папок из среды в программу.

В последнее время для замены текста на сайте пользуюсь только ею.

А также куча других мелких программ (3–10 Kb) на сайте http://serbis.pisem.net/

Сам не тестил, не знаю, инфа взята с другого форума
Автор: wolf0425
Дата сообщения: 20.05.2007 22:41
Nagual
Цитата:
Программа для замены (удаления) текста в группе текстовых
программа не делает НИЧЕГО из того что я просил - ни интерфейса командной строки нет, ни стандартных регэкспов не понимает, ни списка команд последовательной обработки не имеет.

А интеграция с эксплорером и гуевый драгэнддроп - это для какого-то другого раздела форума...

ps: мне не нужна 1 простая замена в 1000 файлов в подкаталогах с ручным вводом заменяемого текста.
мне надо за раз обрабатывать 1 файл - но сделать в нем последовательно штук 100 разных замен.
а через 5 минут, час или на следующий день - будет следующий файл на те же ~100 замен.
Автор: Elroir
Дата сообщения: 21.05.2007 01:57
pom205
Какое отношение все это имеет к теме "Задачи на bat-файлах"?
Автор: euheny
Дата сообщения: 21.05.2007 02:56
Elroir
Цитата:
Как определить в какой папке winxp ?

Цитата:
echo %windir%

Не ужели я такой не модный?
Все привыкли к конкретике - чуть ли не пароли указывают...

Вобщем нашёл обходной путь , но тем не менее всё же интересно какие будут варианты

p.s. Речь конечно же о дифферентной winxp , т.е. мы имеем некий диск (буква известна) , естественно с папками , вот и нужно определить ...
Автор: Maza Faka
Дата сообщения: 21.05.2007 07:02
euheny
Тупо, по поиску какого нибудь системного файла например

Код:
Pushd D:\
Dir /b /s /a:-d explorer.exe
Popd
Автор: GORA2
Дата сообщения: 21.05.2007 08:02
Подскажите. Есть ли причины по которым батник, работающий в winXP SP2, может не работать в win2003? Может там какие то команды не поддерживаются или еще что то?
Понимаю, что вопрос глуповато звучит и будут "приведи конкретный батник, а там посмотрим". Но он достаточно большой и причины его неработоспособности могут быть и не в нем, а в чем то другом. Меня интересует только есть ли отличия в работе cmd.exe в этих двух системах?
Автор: KapralBel
Дата сообщения: 21.05.2007 08:48
GORA2
Все функции из ВинХР поддерживаются в 2003

На какой строке не выполняется
отключи echo off и посмотри что не так
Автор: GORA2
Дата сообщения: 21.05.2007 09:00
KapralBel
У меня у самого нет 2003 и нет нормального дистрибутива. Тот который есть не желает ставиться на виртуалку (пишет не найдено место для своп файла). По сему проверить сам этого не могу . Вот и спрашиваю здесь. Возможно дело в Quick Batch File Compiler в который у меня упакован батник, но он вроде должен работать в 2003-м!?
Автор: KapralBel
Дата сообщения: 21.05.2007 09:56
GORA2

Цитата:
Quick Batch File Compiler
- 90% - причина
но есть еще 10%
Автор: JohnRD
Дата сообщения: 21.05.2007 13:01
день добрый

каким образом можно запустить cmd после перезагрузки машины

если добавить сюда путь к cmd с:\1.cmd получиться либо нет?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

спасибо
Автор: KapralBel
Дата сообщения: 21.05.2007 13:27
JohnRD
А планировщик - стандартный позволяет
Автор: Maza Faka
Дата сообщения: 21.05.2007 14:22
JohnRD
Да, получится, но только один раз, после перезагрузки значение в "RunOnceEx" удалится. Батник выполнится до загрузки explorer-a...
Автор: Elroir
Дата сообщения: 21.05.2007 14:29
euheny

Цитата:
Не ужели я такой не модный?

Ну... раз ты сам так говоришь...
Каким образом, из фразы "Как определить в какой папке winxp ?" можно было понять, что надо найти папку не запущеного Windows на каком-то диске? Телепаты - они не здесь, для них есть специальная тема.
По вопросу:

Код:
@echo off
for /r буква_диска:\ %%a in (.) do if exist %%a\win.ini echo %%~dpnxa
Автор: NIKZZZZ
Дата сообщения: 21.05.2007 14:44
euheny

Цитата:
Как определить в какой папке winxp


dir /b /s /a:d c:\system32

Автор: alfer1979
Дата сообщения: 21.05.2007 23:32
Добрый день
Нужна помощь в решении такой задачи
Есть несколько файлов: text1.txt, text2.txt, text3.txt, text4.txt
Необходимо чтобы создался такой файл: из первого файла первые 20 строк, из второго 15 строка, из третьего 15 строка, из четвертого 15 и 16 строка
Большое спасибо за помощь!
Автор: igor_andreev
Дата сообщения: 22.05.2007 00:18
alfer1979

sed 20q text1.txt > new.txt
sed -n "15p" text2.txt >> new.txt
sed -n "15p" text3.txt >> new.txt
sed -n "15,16p" text4.txt >> new.txt

Автор: euheny
Дата сообщения: 22.05.2007 03:11
Elroir

Что-то ничего не выводит

Maza Faka
NIKZZZZ

Выводит , только с лишним

Кстати не знал , что dir такое может
Автор: Elroir
Дата сообщения: 22.05.2007 03:18
euheny
Я проверял на трех машинах с WinXP.
Как ты запускаешь (точная команда)?
Автор: euheny
Дата сообщения: 22.05.2007 04:02
Опа , извиняюсь ...

win.ini за ненадобностью был удалён ...

А можно ли проверку по реестру устроить? (желательно system+software)

Ну и заодно букву диска из батника вынести (для универсальности) .


И ещё вопрос напоследок (всё ни как не соберусь спросить)

Как бы установить переменную так , что бы при запуске другого (ни как не связанного с первым)батника , он мог работать с этой переменной?
Естественно речь не идёт о записи её в файл и подобных мудрениях.
Автор: NIKZZZZ
Дата сообщения: 22.05.2007 05:31
euheny

Цитата:
Выводит , только с лишним


Код: echo off
for /f "tokens=1,2* delims=\" %%i in ('dir /b /s /a:d c:\system32') do (
Set Letter=%%i
Set WinCat=%%j
)
Echo Letter - %Letter%
Echo WinDir - %WinCat%
Автор: Maza Faka
Дата сообщения: 22.05.2007 06:42
euheny

Цитата:
Как бы установить переменную так , что бы при запуске другого (ни как не связанного с первым)батника , он мог работать с этой переменной?

Утилитой "SETX.EXE", есть в дистрибутиве WinXp Pro в папке Support. Одно но, переменная пропишется в реестре навсегда, пока её не удалишь.
Автор: Elroir
Дата сообщения: 22.05.2007 07:16
euheny

Цитата:
А можно ли проверку по реестру устроить? (желательно system+software)
Ну и заодно букву диска из батника вынести (для универсальности) .

Вот вариант учитывающий эти пожелания:

Код:
@echo off
if "%~1"=="" goto :EOF
setlocal
for /r %1\ %%a in (.) do (
if exist %%a\SOFTWARE ( if exist %%a\SYSTEM set "winpath=%%~dpnxa")
if defined winpath goto found)
goto :EOF
:found
for /f "tokens=1,2 delims=\" %%i in ("%winpath%") do echo %%i\%%j
Автор: Gabzya
Дата сообщения: 22.05.2007 13:31
wolf0425
ВСТУ4
4оложение
4оясн.за4.
тут были вместо 4ок- буквы П и п
Автор: GORA2
Дата сообщения: 22.05.2007 15:48
Имею батник следующего содержания:
Код: @echo off
cd /d %MYFILES%
echo MYFILES=%MYFILES%
echo %%0=%0
echo %%1=%1
pause>nul
exit
Автор: NIKZZZZ
Дата сообщения: 22.05.2007 16:36
GORA2
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\bt4708.bat - это твой батник. Не отвечай на запрос "Pause" , чтобы батник не стерся, и посмотри его содержимое. По всей видимости QBFC добавил первой строкой команду Shift , чтобы передать батнику параметры запуска через первый параметр командной строки, и эта команда не отрабатывается в Win2003.



Автор: alfer1979
Дата сообщения: 22.05.2007 17:03
igor_andreev


Цитата:
sed 20q text1.txt > new.txt
sed -n "15p" text2.txt >> new.txt
sed -n "15p" text3.txt >> new.txt
sed -n "15,16p" text4.txt >> new.txt


что-то не срабатывает
пишет "sed" не являеться внутреней или внешней команды, исполняемым файлом или пакетным файлом

P.S. Разобрался . Спасибо . Все работает. Не подскажете как сделать так чтобы копировало не всю строку, а первые 50 символов?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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