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

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

Автор: 01MDM
Дата сообщения: 27.10.2010 18:19
Saymer

Цитата:
файл удаляется, а папка нет.

Папки удаляются командой rd

Код:
rd /s /q "Папка"
Автор: wolf0425
Дата сообщения: 28.10.2010 10:01
1. как бы в Windows7 проиграть звуковой файлик? sndRec32 там упразднили
2. если проигрыватель будет запущен от системы - юзер за компом звук вообще услышит? (на Windows7, в ХР проблем нет)
Автор: lizun
Дата сообщения: 28.10.2010 12:23
Подскажите, как внести в переменную символ ">"?
Мне в зависимости от некоторых условий нужно то дописывать в файл, то начинать файл заново (ведется обычный лог и используется перенаправление вывода в файл).
То есть мне нужно чтобы работала такая конструкция:

Код: set UseLogAddingMode=^>
echo test>%UseLogAddingMode%c:\file.txt
pause
Автор: bomzzz
Дата сообщения: 28.10.2010 12:23
экранировать знаком ^

Добавлено:
%UseLogAddingMode%c:\file.txt
то есть?????

Добавлено:
if сделай и в зависимости от результата переход на такой оператор >> и такой >
Автор: Romanchikprivet
Дата сообщения: 28.10.2010 12:30
Спасибо, wolf0425. Все работает
Автор: lizun
Дата сообщения: 28.10.2010 12:42
bomzzz

Цитата:
%UseLogAddingMode%c:\file.txt
то есть?????

То есть в этой переменной будет один символ ">" либо эта переменная будет пустой.

Цитата:
if сделай и в зависимости от результата переход на такой оператор >> и такой >

И чтобы мне в нескольких местах не усложнять это дело с if я и решил, что подставлю эту переменную, соответственно получу либо >> либо >
Автор: bomzzz
Дата сообщения: 28.10.2010 12:47
врядли батники такое допускают, самомодифицирующий код делается прямым редактированием оперативной памяти

Добавлено:
надо же - допускают. у меня работает
Автор: lizun
Дата сообщения: 28.10.2010 12:56
bomzzz
а такой код работает в зависимости от значений UseLogAddingMode в Yes и No?

Код: rem
set UseLogAddingMode=Yes
rem set UseLogAddingMode=No

if "UseLogAddingMode"=="Yes" (
set a=^>
) else (
set a=
)
echo "%a%">%a%c:\test.txt
pause
pause
Автор: bomzzz
Дата сообщения: 28.10.2010 13:00
if "UseLogAddingMode"=="Yes" (
echo >>c:\test.txt
) else (
echo >c:\test.txt
)
pause
Автор: smirnvlad
Дата сообщения: 28.10.2010 13:10
lizun

Цитата:
if "UseLogAddingMode"=="Yes" (

такой нет
а вот такой работает
if "%UseLogAddingMode%"=="Yes" (
Автор: lizun
Дата сообщения: 28.10.2010 13:35
smirnvlad

Цитата:
а вот такой работает
if "%UseLogAddingMode%"=="Yes" (

Спасибо!
какой глупый косяк был и ведь не заметил бы ещё долго, чувствую...
bomzzz, smirnvlad, спасибо, ребята!
Автор: Saymer
Дата сообщения: 28.10.2010 14:31
Снова возникли вопросы. По поводу удаления папки командой rd вчера нашел, но нужно прописывать путь к папке, а путь неизвестен получается.

Возникли пару вопросов ещё:
1) Как сделать задержку вывода на экнан?
Т.е. имеется

Код:
@echo off
Echo Выполняется поиск, пожалуйста ждите...
Echo Это может занять несколько минут...
Автор: 01MDM
Дата сообщения: 28.10.2010 15:18
Saymer

Цитата:
но нужно прописывать путь к папке, а путь неизвестен получается.


Код:
@echo off

for %%i in (c d e f g h i j k l m n o p q) do if exist %%i: (

for /f "tokens=*" %%j in ('dir /b /s /ad %%i:\*Detalizacia*') do rd /s /q "%%j"

)
Автор: vitaliy91
Дата сообщения: 28.10.2010 19:10
Почему-то в чистом MS-DOS 7 - 8 не работает errorlevel
Ктонибудь знает почему ?
Автор: Accessor
Дата сообщения: 28.10.2010 21:01
vitaliy91
Что-то мне подсказывает, что Microsoft не допустила бы такой конфуз. Ищите ошибки со своей стороны.
Автор: vitaliy91
Дата сообщения: 28.10.2010 21:19
Я уже по всякому пробывал. Интерпретатор просто игнорирует эту переменную
например
echo %errorlevel%
ECHO is on

if not errorlevel 0 echo err
Ничего не выводится там где явно была ошибка
Автор: smirnvlad
Дата сообщения: 28.10.2010 21:37
vitaliy91
if not errorlevel 0
в переводе если errorlevel меньше нуля, а меньше нуля он не бывает
if errorlevel 1 echo errorlevel^>=1
Автор: king_stiven
Дата сообщения: 28.10.2010 21:38
vitaliy91

Цитата:
ECHO is on

if not errorlevel 0 echo err

в данном случае errorlevel реагирует на предыдущую команду, то есть на

ECHO is on
Автор: smirnvlad
Дата сообщения: 28.10.2010 21:49
king_stiven
не уверен насчет доса, но у меня в win xp echo не меняет errorlevel
Автор: vitaliy91
Дата сообщения: 28.10.2010 22:00
king_stiven
При выполнении echo %errorlevel% должно выводится число возврата а выводится
ECHO is on а это значит что переменная %errorlevel% пустая

CD B:
Invalid drive specification
if not errorlevel==0 echo err
Ничего не выводится

if not %errorlevel%==0 echo err
Syntax error (потому что переменная %errorlevel% пуста а должна хранить значение errorlevel)

smirnvlad

На XP все отлично работает но и в чистом досе эта переменная законспектирована и должна работать.
Не работает в версиях 6.22, 7.0, 7.1, 8.0
Автор: wolf0425
Дата сообщения: 28.10.2010 22:27
vitaliy91
Цитата:
При выполнении echo %errorlevel% должно выводится число возврата а выводится
ECHO is on а это значит что переменная %errorlevel% пустая

ЕМНИП псевдопеременная %errorlevel% появилась именно как переменная в win2k
в досе - было только скрытое состояние errorlevel, проверяемое командой if [not] errorlevel N, как такой командой пользоваться кажется уже разобрались.
Автор: king_stiven
Дата сообщения: 28.10.2010 22:43
vitaliy91
Значит %errorlevel% не определена, но errorlevel ведь работает.
Автор: vitaliy91
Дата сообщения: 28.10.2010 23:01
king_stiven
Не работает
Автор: king_stiven
Дата сообщения: 29.10.2010 08:15
vitaliy91

Цитата:
echo %errorlevel%
if not errorlevel 0 echo err

В данном случае errorlevel отслеживет предыдущие до echo код возврата так как команда ECHO никак не влияет на код возврата, поэтому конструкция

if not errorlevel 0 echo err

расшифровывается как: если код возврата меньше нуля, то вывести err,
но так как код возврата не может быть меньше 0 , то соотвественно err и не выводится. Вот я запустил в винде:

Код: chcp 1251
echo %vel%
if errorlevel==0 echo код возврата равен 0, то есть команда echo %vel% никак не влияет на код возврата, несмотря на неопределённую переменную vel
pause
Автор: Accessor
Дата сообщения: 29.10.2010 11:02
vitaliy91
Цитата:
CD B:
Invalid drive specification
if not errorlevel==0 echo err
Ничего не выводится
А ничего и не должно выводиться. Читаем справочку по команде if :
Код: C:\>if /?
Оператор условного выполнения команд в пакетном файле.

IF [NOT] ERRORLEVEL число команда
IF [NOT] строка1==строка2 команда
IF [NOT] EXIST имя_файла команда
Автор: vitaliy91
Дата сообщения: 29.10.2010 13:52
Спасибо. Вроде разобрался

И такой вопрос. Как можно найти первую свободную букву в чистом досе
IF exist A: в чистом досе не работает
CD A: не оставляет кода возврата
Автор: Accessor
Дата сообщения: 29.10.2010 13:59
vitaliy91
ну, как же не оставляет? ты так ничего и не понял.
вот смотри
Код: cd b:
if errorlevel 1 (echo error) else (echo no error)
Автор: vitaliy91
Дата сообщения: 29.10.2010 14:14
В чистом досе CD не возвращает ошибки
А у оператора условия нет else и не должно быть скобок.
Приходиться мучаться
Автор: wolf0425
Дата сообщения: 29.10.2010 14:20

Цитата:
Если бы это была настоящая переменная, то она была бы видна в результате выполнения команды

так в виндах - она и видна замечательно только не в команде set, а при использовании.

Добавлено:

Цитата:
В чистом досе CD не возвращает ошибки
а вот это - засада...
Автор: Accessor
Дата сообщения: 29.10.2010 14:46
wolf0425
Цитата:
так в виндах - она и видна замечательно только не в команде set, а при использовании.
Наверное она создаётся в момент запуска пакетного файла. Будем знать.

vitaliy91
Ты совершенно неверно понимаешь ситуацию. Точнее заблуждаешься. Во-первых чистый ДОС - это операционка, в моём понимании, существовавшая до появления Windows 95. Из числа продуктов фирмы Microsoft мне известны версии 3.30, 5.0, 6.0 и 7.1; последняя - это базовая ОС для win95, win98 и Линолеум. С тех пор чистый ДОС перестал существовать, точнее развиваться. То, что ты представил на скриншоте - это не чистый ДОС. Это всего-навсего консольное окно, запушенное из-под графической оболочки твоей Висты или Семёрки.
Теперь идём дальше. Чтоб иметь возможность обработать errorlevel нужно запускать команды не из командной строки, последовательно одна-за-одной, набирая их вручную, а создать текстовый файл, например, с помощью Блокнота, записать в него весь набор команд и сохранить с любым именем и с расширением *.cmd и после этого запустить полученный файл обычным двойным кликом. Появится консольное окно, выполнятся команды и консоль закроется. Чтоб увидеть результат работы, в последней строке можно поставить команду pause
Вот тогда, и только тогда тебе будет доступен и errorlevel, и else в команде if, и скобки в этой же команде.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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