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

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

Автор: KapralBel
Дата сообщения: 22.08.2006 10:26
Accessor
Измени строку
if err 1 goto error
на if %err%== 1 goto error
Автор: m a x
Дата сообщения: 22.08.2006 10:33
Accessor
Еще можно так

Код: @echo off
rar a test c:\*.txt
if errorlevel 1 goto error
echo Архивация завершилась успешно
goto end
:error
echo Ошибка арзивации
:end
Автор: Accessor
Дата сообщения: 22.08.2006 11:32
KapralBel
Спасибо, так заработало, но есть еще вопрос. Я немного видоизменил командный файл, и хочу чтобы код ошибки РАРа записывался в лог архивации:
@echo off
rar a test c:\*.txt
set err=%errorlevel%
if %err%==1 goto error
echo Архивация завершилась успешно>>log.txt
echo %err%>>log.txt
goto end
:error
echo Ошибка архивации>>log.txt
echo %err%>>log.txt
:end

код ошибки почему-то не попадает в log.txt

Добавлено:
значение переменной %err% не попадает в логи, а если заменить %err% на %date% или на %time% то дата/время будут прекрасно записываться в лог
непонятно как такое победить ?
Автор: KapralBel
Дата сообщения: 22.08.2006 11:53
Accessor
Пробелы поставь

Код: echo %err% >>log.txt
Автор: Accessor
Дата сообщения: 22.08.2006 12:14
KapralBel
Спасибо, работает, но как объяснить, что в случае с %date% и %time% пробел не нужен, а в случае с %err% он уже становится архинеобходим
Автор: KapralBel
Дата сообщения: 22.08.2006 12:33
Accessor
БМП (без малейшего понятия)
Просто давным давно у меня вошло в привычку отделять символы перенаправления пробелами
Автор: Kirillhome
Дата сообщения: 22.08.2006 14:50
Accessor
Echo вообще как-то странно ведёт себя в батниках..

к примеру, такой бат-файл

Код: echo str >>456.txt
Автор: KapralBel
Дата сообщения: 22.08.2006 15:07
Accessor
разобрался с этим глюком, благодоря посту Kirillhome

Echo str 2>>text.txt - выводит в text.txt - сообщения о ошибках (в данном случае ничего)
Echo str 1>>text.txt - выводит в text.txt - стандартный вывод (в данном случае str)

dir a:>c:\file.txt 2>&1, перенаправляет в файл c:\file.txt, как стандартный поток (листинг дискеты), так и сообщения о ошибках (если дискета не вставлена)
Т.е перенаправляет поток ошибок STDERR в стандартный поток
Автор: Refugee
Дата сообщения: 22.08.2006 15:08
Перед > >> | можно указывать номера потоков.
1 - это номер потока стандартного вывода (stdout), по умолчанию для >> >
prog 2>>file значит отправить в файл то, что выведет прога на stderr
Автор: 4eszxdr5
Дата сообщения: 23.08.2006 10:56
Запускаю из батника (последняя строка) програму таким образом:
"D:\Program Files\EmEditor\EmEditor.exe"
запуск происходит, но при этом окно консоли cmd сворачивается в панель задач и висит там до тех пор, пока не закрою запущенную батником программу.
Как сделать, чтобы окно консоли закрывалось сразу после запуска программы (программа оставалась, а консольное окно закрывалось)?
Автор: m a x
Дата сообщения: 23.08.2006 11:39
4eszxdr5
start /d"D:\Program Files\EmEditor\" EmEditor.exe
Автор: Gatti
Дата сообщения: 31.08.2006 13:07
Добрый день.

Вопрос наверно ламерский, но все же хотелось бы знать, почему введя в командной строке последовательно:
set var=d:\вася пупкин
echo %var%
Получаю
d:\вася пупки
Набрав эти тоже самое в блокноте и сохранив как test.bat при запуске получаю
d:\всякие кракозябры ?
Автор: KapralBel
Дата сообщения: 31.08.2006 13:31
Gatti
Потому что консоль работает в кодировке 866
А блокнот сохраняет в 1251
Автор: Kirillhome
Дата сообщения: 31.08.2006 13:35
Gatti
В блокноте в первой строке
chcp 1251
Автор: tedhome
Дата сообщения: 05.09.2006 13:16
VBS. Народ, подскажите Pls как из текстового файла выводить в новый файл текст определенного номера строки. Пока получилось только выводить последнюю строчку в тексте.

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("work.txt", 1)
Do Until objTextFile.AtEndofStream
strNextLine = objTextFile.Readline
arrServiceList = Split(strNextLine, ",")
k = arrServiceList (0)
For i=1 to Ubound(arrServiceList)
k = arrServiceList (i)
Next
Loop
Set f = objFSO.OpenTextFile("edit.txt", 2, True)
f.write k
f.close
objTextFile.close
Автор: KapralBel
Дата сообщения: 05.09.2006 13:28
tedhome

Код: @Echo Off
Set A=0
For /F %%a In (R) Do Call :Lab1 %%a
GoTo :EOF

:Lab1
Set /A A=%A%+1
If %A% == 5 Echo %1 >>rr
GoTo :EOF
Автор: tedhome
Дата сообщения: 05.09.2006 15:15
Спасибо! но выводит только первое слово. Если же в строке есть пробелы то тогда будет только первое слово. А нужно чтоб всю строку целиком. Это как-то можно разрешить?
Автор: KapralBel
Дата сообщения: 05.09.2006 15:39
tedhome

Код: @Echo Off
Set A=0
For /F "delims=$" %%a In (R) Do Call :Lab1 "%%a"
GoTo :EOF

:Lab1
Set st=%1
Set ST=%ST:~1%
Set ST=%ST:~0,-1%
Set /A A=%A%+1
If %A% == 5 Echo %st%>>rr
GoTo :EOF
Автор: tedhome
Дата сообщения: 07.09.2006 08:00
Спасиба огроменное!
Автор: bdfy
Дата сообщения: 12.09.2006 23:10
Надо организовать цикл по сути формирующий все комбинации из пяти (или больше ) по четыре с повторениями . Реально ли батником обойтись ? Есть пять разных текстур надо сделать переходные между ними (т.е текстуры стыков основных текстур ) - програмка для этого есть. Работает из ком. строки как
pal2pacE.exe -combine v1.tga v2.tga v3.tga v4.tga v1v2v3v4.pac
где v1.tga v2.tga v3.tga v4.tga - те самые основные текстуры (дальше v5,v6) ,а v1v2v3v4.pac - генерируемая переходная текстура в формате игры. Текстур переходных нужно много, если руками то надо набивать ком. строки
pal2pacE.exe -combine v1.tga v1.tga v1.tga v2.tga v1v1v1v2.pac
pal2pacE.exe -combine v1.tga v1.tga v1.tga v3.tga v1v1v1v3.pac
pal2pacE.exe -combine v1.tga v1.tga v1.tga v4.tga v1v1v1v4.pac
pal2pacE.exe -combine v1.tga v1.tga v2.tga v1.tga v1v1v2v1.pac
и так далее. А строчек то сотни... как бы организовать это дело ?
Автор: KapralBel
Дата сообщения: 13.09.2006 12:22
bdfy

Код: @Echo Off
For /L %%a in (1,1,5) Do Call :L1 %%a
GoTo :EOF

:L1
For /L %%a in (1,1,5) Do Call :L2 %1 %%a
GoTo :EOF

:L2
For /L %%a in (1,1,5) Do Call :L3 %1 %2 %%a
GoTo :EOF

:L3
For /L %%a in (1,1,5) Do Call :L4 %1 %2 %3 %%a
GoTo :EOF

:L4
For /L %%a in (1,1,5) Do Call :L5 %1 %2 %3 %4 %%a
GoTo :EOF

:L5
pal2pacE.exe -combine v%1.tga v%2.tga v%3.tga v%4.tga v%5.tga v%1v%2v%3v%4v%5.pac
GoTo :EOF
Автор: bdfy
Дата сообщения: 13.09.2006 13:42
KapralBel
Wow !
Только их пяти по четыре надо было, а не по пять. т.е последняя строчка
pal2pacE.exe -combine v%1.tga v%2.tga v%3.tga v%4.tga v%1v%2v%3v%4.pac
спасибо огромное. А можно ли придумать как что-то вроде прогресс бара ? а то все это действо минут 15 занимает...
Автор: Zitz
Дата сообщения: 13.09.2006 14:19
Коллеги, помогите пожалуйста с проблемой. Из батника вызывается программа, потом анализируется код возврата, с которым она завершилась, что-то вроде if errorlevel 1 goto LABEL. Так вот, в 2000/XP все нормально, а в 9x errorlevel после вызова программы всегда равен 0. Насколько я понял дело здесь в том, что command.com в отличие от cmd.exe не дожидается, когда и с каким результатом завершится прога, а переходит к следующей команде (сама вызываемая прога 0 не возвращает ни при каких обстоятельствах). Как можно анализировать код возврата в 9х?
Автор: KapralBel
Дата сообщения: 13.09.2006 15:03
Zitz
Приведи батничек
Автор: Zitz
Дата сообщения: 14.09.2006 07:22
Ну вот например такой батник:

Код:
@echo off
notepad.exe
echo go further....
pause
Автор: KapralBel
Дата сообщения: 14.09.2006 09:02
Zitz
Приведи полностью с обработкой ErrorLevel
Автор: Zitz
Дата сообщения: 14.09.2006 09:19
Я не понял, для чего тебе полный пример, ведь я источник проблемы знаю и ее описал. Тем не менее привожу код. Программа oscheck.exe - определяет версию ОС и возвращает код (ноль никогда). А вообще в целом задача такая - определять из батника точную версию ОС.


Код: @echo off
oscheck.exe
if errorlevel 2 goto WIN98
if errorlevel 1 goto WIN95
if errorlevel 0 goto ERROR
:WIN95
echo Windows 95
goto END    
:WIN98
echo Windows 98
goto END
:ERROR
echo No result... ERROR!
goto END
:END
pause
Автор: KapralBel
Дата сообщения: 14.09.2006 09:43
Zitz
Кинь мне на KapralBel /хм. некий символ/ GMail.Com - эту утиль
Автор: wader
Дата сообщения: 14.09.2006 10:04
Zitz
А прога oscheck.exe не гуевая? Если это твоя программа, сделай ее консольной.
Автор: Zitz
Дата сообщения: 14.09.2006 10:08
wader
Моя, гуевая. Только все равно command.com не дожидается ее завершения (ни ее ни любой другой) и код возврата не анализирует. Собственно весь вопрос в том как заставить ожидать завершения и анализировать возвращаемое значение...

Добавлено:
Точнее она не гуевая, а консольная (в смысле main а не WinMain), но скомпилирована без создания консольного окна

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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