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

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

Автор: Elroir
Дата сообщения: 15.10.2006 15:02
FXPELIVE
Smitis
Ping не всегда правильно выдает код возврата. Достаточно распространенный способ проверки - это сочетание команды ping и find

Код:
PING server | FIND "TTL=" >NUL
IF ERRORLEVEL 1 GOTO Error
..
..
..
goto Exit
:Error
echo Server is not available
:Exit
Автор: evle
Дата сообщения: 15.10.2006 15:38
По поводу чтения настроек батника из ini-файла.
Разбирать именно формат ini мне было лень, но более простой вариант у меня работает так:

Код:
setlocal enabledelayedexpansion
for /f "eol=# tokens=*" %%i in (settings.conf) do set %%i
Автор: Snerov1k
Дата сообщения: 15.10.2006 16:05
А можно сделать так: - при первом запуске батника выводятся запросы - (прописать пути и размер макс строки архива(для винрара)) потом записывает это все в лог и в последующем будет брать инфу оттуда.

ЗЫ немного не в тему но.. А может есть программы , что то типа для создания install.exe что бы при установке можно было указывать пути и параметы, которые в последующем в файли(батник) навсегда пропишуться?

Автор: Imagoham
Дата сообщения: 15.10.2006 20:03
Сорри что сразу сюда не зашёл.. - создал новую тему.

Вопрос по существу:

Имеется система с WinXP SP2 и туда ставится Office 2003 SP2 (административная установка) - Office за собой тянет немало шрифтов, 90% которых НЕ кириллические. Имеется набор таких же шрифтов только нормальных - кириллических, но при попытке инсталляции (или просто создания ярлыков) средствами Винды - последняя ругается - дело в том что имена шрифтов тех и других по большей части совпадают.
Прощёлкать шрифты и поудалять их вслед за установкой Office на одной машине можно, хоть и долго - но машин 18 (!), это ОЧЕНЬ долго.
Мож у кого скрипт есть или батничек подходящий??

ЗЫ. Пробовал WinRAR.SFX - дохлый номер - говорит угу и всё - папка Font наполовину убита - шрифты есть, но не читаются.

Установка нужна из командной строки.
Автор: loat
Дата сообщения: 15.10.2006 22:22
Помогите пожалуйста.
Нужно написать такой батник чтобы он удалял файлы текущего каталога, имена которых начинаются с буквы, указанной в качестве параметра. Для каждого файла случае успешного удаления выдавать сообщение: «Удален файл (имя_файла)». В случае неудачи выдавать сообщение: «Файл (имя_файла) защищен от удаления. Удалить его?» и в случае ответа «Д» или «Y» все-таки удалить файл.
Автор: Elroir
Дата сообщения: 16.10.2006 00:07
loat
Запрос нужен в командной строке или графический (диалогом) ?
Автор: loat
Дата сообщения: 16.10.2006 00:33
в командной строке
Автор: Kronix
Дата сообщения: 16.10.2006 05:15
помогите с задачкой, нужно перенести файлы в папку Ready
:: Переносим в папку Ready
FOR %%c in ( *.rar ) do (
set NameRar=%%c
FOR /L %%j in (1,1,100) do (
if exist ..\Ready\%NameRar% (set NameRar=%%~nc%%j.rar)
)
move %%c ..\Ready\%NameRar%
)
Неправильно работает (пытаюсь к имени файла добавить номер, если такой уже существует)
Автор: Elroir
Дата сообщения: 16.10.2006 05:40
Какие errorlevels возвращает команда del?
Автор: Craager
Дата сообщения: 16.10.2006 07:48
Люди, задача для 1 класса вообще (((

Есть 3 файла:

Первый: .reg ФАЙЛ, который вносит инфу в реестр без запроса с помощью батника
Второй: сам батник
Третий: ярлык интернета

Всё это добро заархивировано в .SFX архив винрара, который в свою очередь запускает батник скрыто.

Так вопрос в том, что в батнике прописать нужно, чтобы была пауза секунды 3-4 между внесением в реестр и запуском ярлыка интернета.
Автор: GOODmen
Дата сообщения: 16.10.2006 08:14
может здесь кто знает как сказать РАРу чтоб он не перечислял все файла при архивировании из комстроки, а вывел только результат? у меня этот процесс логируется, и видеть всю кучу файлов не совсем хочется
Автор: kazavo4ka
Дата сообщения: 16.10.2006 08:56
To All
Загляните пожалуйста в этот топик. Может кто-нибудь поможет.
Сорри если не совсем в тему, просто очень уж надо...
Автор: Snegov1k
Дата сообщения: 16.10.2006 08:58
Этот код считает количество:
@Echo Off
set Counter=0
FOR /F %%i IN ('dir /b /a-d /on Log\*.Log') DO Call :Count %%i
echo %Counter%
GoTo :EOF

:Count
echo %1 %counter%
Set /a Counter=%Counter%+1
GoTo :EOF

А как результат в файл записать? ) ( В название или тело)
Автор: ViSiToR
Дата сообщения: 16.10.2006 09:16
Craager

Цитата:
что в батнике прописать нужно, чтобы была пауза секунды 3-4



Код: ping -n 3 localhost > nul
Автор: Snegov1k
Дата сообщения: 16.10.2006 09:51
ViSiToR А как оставить только последнее значение?

Добавлено:
А можно в этот файл запихнуть еще и общий размер файлов?
ЗЫ как бат заставить понимать русские пути?
Автор: Elroir
Дата сообщения: 16.10.2006 12:29
ViSiToR
Спасибо, а то я уже начал думать, что у меня руки кривые
Ноль возвращается вообще всегда - есть файл, нет , read-only и т.д.
All
Ситуация такая - пытаюсь добиться от команды del ответа - удалила ли она файл(read only). Так как errorlevel она всегда возвращает нулевой, делаю так:

Код: del "%%i" 2>&1 | find "Access" > nul
Автор: Smitis
Дата сообщения: 16.10.2006 12:47
Elroir

Цитата:
if errorlevel 0 (echo Read only file ) else (echo File was deleted)

Проблема в том, что он всегда выдает "Read only file", независимо от того защищен ли файл.
Может я чего-то не то делаю?

Вот так:

Код:
if errorlevel 1 (echo File was deleted) else (echo Read only file )
Автор: Elroir
Дата сообщения: 16.10.2006 13:04
Smitis
Спасибо! А почему от перемены мест слагаемых, сумма меняется?
loat

Код:
@echo off
if "%1"=="" goto exit
chcp 1251 > nul
for %%i in ( %1*.* ) do (
del "%%i" 2>&1 | find "Access" > nul
if errorlevel 1 ( echo Файл "%%i" удален. ) else ( call :choice "%%i" )
)
goto exit

:choice
setlocal
set del_choice=
set /p del_choice=Файл %1 защищен от удаления. Удалить его?
if not '%del_choice%'=='' set choice=%choice:~0,1%
if /I '%del_choice%'=='Y' call :force %1
if /I '%del_choice%'=='Д' call :force %1
endlocal
goto exit

:force
del /f /q %1
echo Файл %1 удален.

:exit
Автор: Kirillhome
Дата сообщения: 16.10.2006 13:10
Elroir
А не проще проверку удаления делать через if exist "%%i"???
Автор: Elroir
Дата сообщения: 16.10.2006 13:28
Kirillhome
Проще, конечно
Вот что получается, когда делаешь что-то в 4 часа утра.
Автор: ViSiToR
Дата сообщения: 16.10.2006 13:37
Elroir
Если нужна проверка файла на то, имеет ли он атрибут “Только для чтения”, то попробуй такой вариант:


Код: @echo off
attrib fileTocheck.txt > for.tmp
for /f "delims=A " %%I in (for.tmp) do if /i "%%I"=="R" (echo Read only file) else (echo File was deleted)
del /f /q for.tmp
pause
Автор: Smitis
Дата сообщения: 16.10.2006 14:01
Elroir

Цитата:
Спасибо! А почему от перемены мест слагаемых, сумма меняется?

Потому, что проверка через errorlevel это проверка на БОЛЬШЕ ИЛИ РАВНО.
Соответственно:
if errorlevel 1 - это >= 1
а
if errorlevel 0 - это >= 0 (т.е. ВСЕ возвращаемые find значения)
Автор: Snegov1k
Дата сообщения: 16.10.2006 14:05
ViSiToR, получилось так
@echo off
chcp 1251
set Counter=0
FOR /F %%i IN ('dir /b /a-d /on C:\TEMP\*.*') DO Call :Count %%i
echo %Counter%
GoTo :EOF

:Count
echo %1 %counter%
Set /a Counter=%Counter%+1
Set Size=0
For /R "C:\TEMP" %%a in (*.*) Do Call :Label1 %%~za
Echo. >> ResultCount.txt
Echo size=%Size% > ResultCount.txt
Echo %counter% >> ResultCount.txt
GoTo :EOF

:Label1
Set /A Size=%Size%+%1
GoTo :EOF

А как после выполнения всех этих действий продолжить выполнение программы?
(в моем случаем почтовик вызывается, прикрепляется этот файл и уходит дальше)

А GoTo :EOF как расшифровать?
Автор: Kronix
Дата сообщения: 16.10.2006 17:08
Ещё раз обращаюсь с задачкой, нужно перенести файлы в папку Ready
:: Переносим в папку Ready
FOR %%c in ( *.rar ) do (
set NameRar=%%c
FOR /L %%j in (1,1,100) do (
if exist ..\Ready\%NameRar% (set NameRar=%%~nc%%j.rar)
)
move %%c ..\Ready\%NameRar%
)
Неправильно работает (пытаюсь к имени файла добавить номер, если такой уже существует)
Автор: ViSiToR
Дата сообщения: 16.10.2006 20:26
Snegov1k

Цитата:
А как после выполнения всех этих действий продолжить выполнение программы?


Вместно :EOF поставь метку на продолжение скрипта...


Код:
@echo off

set Counter=0
FOR /F %%i IN ('dir /b /a-d /on ..\opera\*.*') DO Call :Count %%i
echo %Counter%
Echo size=%Size% > ResultCount.txt
Echo %counter% >> ResultCount.txt
GoTo Next

:Count
echo %1 %counter%
Set /a Counter=%Counter%+1
Set Size=0
For /R "..\opera" %%a in (*.*) Do Call :Label1 %%~za
GoTo :EOF

:Label1
Set /A Size=%Size%+%1
GoTo :EOF

:Next
echo тут остальной скрипт

Автор: Snerov1k
Дата сообщения: 16.10.2006 20:35
Спиасибо
Насчет лишней точки - это записывается второй результат ( считается кол-во и общий объем файлов).
Т.е. перейдет к выполнению дальнейших операций -посчитав- количество и -объем-?

(результат файл ResultCount.txt с текстом
size-34348
3 (кол-во частей)

Добавлено:
:Label1
Set /A Size=%Size%+%1
GoTo Next

считает размер - и если я поставлю NEXT - он уейдет после первого цикла?
Автор: loat
Дата сообщения: 17.10.2006 01:17
Помогите пожалуйста.
Нужно написать такой батник чтобы он удалял файлы текущего каталога, имена которых начинаются с буквы, указанной в качестве параметра. Для каждого файла случае успешного удаления выдавать сообщение: «Удален файл (имя_файла)». В случае неудачи выдавать сообщение: «Файл (имя_файла) защищен от удаления. Удалить его?» и в случае ответа «Д» или «Y» все-таки удалить файл.
Автор: Kirillhome
Дата сообщения: 17.10.2006 01:30
loat
А для кого это писалось???
Автор: Elroir
Дата сообщения: 17.10.2006 01:59
Smitis
Понятно. Очень правильное, все таки, высказывание - RTFM.
Надо мне посерьезней к нему отнестись.

loat
Окончательный вариант таков ( спасибо Kirillhome)

Код:
@echo off
if "%1"=="" goto exit
chcp 1251 > nul
for %%i in ( %1*.* ) do (
del "%%i" 2>nul > nul
if not exist %%i ( echo Файл "%%i" удален. ) else ( call :choice "%%i" )
)
goto exit

:choice
setlocal
set del_choice=
set /p del_choice=Файл %1 защищен от удаления. Удалить его?
if not '%del_choice%'=='' set choice=%choice:~0,1%
if /I '%del_choice%'=='Y' call :force %1
if /I '%del_choice%'=='Д' call :force %1
endlocal
goto exit

:force
del /f /q %1
echo Файл %1 удален.

:exit
Автор: Kronix
Дата сообщения: 17.10.2006 02:10
Сделал вот так:

FOR %%c in ( *.rar ) do (
if NOT exist ..\Ready\%%c (move %%c ..\Ready\%%c) ELSE (
FOR /L %%j in (1,1,10) do (
if NOT exist ..\Ready\%%~nc%%j.rar (move %%c ..\Ready\%%~nc%%j.rar)))
)
Работает, но после первого переноса файла будет выскакивать сообщение о том, что файл не существует. Как выйти и цикла не понятно, set j=10 не помогает

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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