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

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

Автор: ZolotnikOV
Дата сообщения: 01.11.2009 22:30
а возможно что бы батник(а потом .exe) брал инфу для параметра set с текстового файла (типа аналогия с ini). что бы путь C:\PROGRA~1\WINRAR был в отдельном (текстовом) файле и мог легко изменяться, а сам исполняемый файл нет.


Код: set WR=C:\PROGRA~1\WINRAR
Автор: mugil_cephalus
Дата сообщения: 01.11.2009 22:44
Господа, может кто поможет, а то я уж голову сломал, где ошибка



Цитата:
mat86
@echo off
for /f "tokens=*" %%A in ('fsutil fsinfo drives') do call :_1 "%%A"
goto :eof

:_1
if /i "%1" equ "A:\" goto :eof
if /i "%1" equ "B:\" goto :eof
for /f "tokens=*" %%A in ('fsutil fsinfo drivetype %1 ^| findstr /v /i Неизвестный корневой Жесткий сетевой Компакт Электронный') do echo %%A && if exist "%1antivirus\curiet.exe" "%1antivirus\curiet.exe" >nul 2>&1
goto :eof


( http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=1280#4 )

если бы еще не
Цитата:
mat86
я бы тебе набил непаллиативный скрипт, - но у меня третий день шина на правой руке, - уж замучился левой вбивать

, может справился....


О решаемой задаче для mat86'a ( http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=1240#8 ):


Цитата:
Помогите пожалуйста, создал себе барт. Хочу чтобы антивирусы запускались с флэшки, если она есть. Создал папку antivirus на флэшке в нее положил сканер curiet.exe. Как написать bat чтобы запускать curiet.exe с флэшки ведь буква флэшки на каждом компе может быть разная?



Цитата:
Цитата:for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do if exist "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"

Все четко работет, а возможно сделать чтобы не проверялось на cd-rom?


Автор: Rush
Дата сообщения: 01.11.2009 23:31
mugil_cephalus
Попробуй так:
Заместо

Код: for /f "tokens=*" %%A in ('fsutil fsinfo drives') do call :_1 "%%A"
Автор: mat86
Дата сообщения: 02.11.2009 11:55

Цитата:
Попробуй так:
Заместо

Код:for /f "tokens=*" %%A in ('fsutil fsinfo drives') do call :_1 "%%A"


так

Код:for /f "tokens=1 delims=\" %%A in ('fsutil fsinfo drives ^| more') do call :_1 "%%A"


Соответственно и проверку не A:\ B:\, а A: B:

запустил через командную строку bat по пути H:\curf.bat вот:
C:\Documents and Settings\Admin>H:\curf.bat
Непредвиденное появление: A:"".

C:\Documents and Settings\Admin>
Автор: garri671
Дата сообщения: 02.11.2009 12:15
Всем привет!
Подскажите, плиз.
написал батник
chcp 1251>nul
for /f "tokens=*" %%A in (ad.txt) do (sc \\%%A config "symantec antivirus" start= auto & sc \\%%A start "symantec antivirus" & shutdown /r /t 120 /m \\%%A /c "Внеплановая перезагрузка через 2 минуты. System Reset 2 min")
Как вывести результат работы?
Автор: mugil_cephalus
Дата сообщения: 02.11.2009 12:15
Rush
у меня вроде неплохо (может есть ошибки - я скрипт пока мало погонял) отрабатывает, но мне трудно судить - код заточен под флэшку, а ее у меня нет . вот мой output:


Цитата:
G:\scripts>z3.bat

G:\scripts>echo on

G:\scripts>for /F "tokens=*" %A in ('fsutil fsinfo drives') do call :_1 "%A"

G:\scripts>call :_1 "A:\"

G:\scripts>if /I ""A:\"" EQU "A:\" goto :eof

G:\scripts>if /I ""A:\"" EQU "B:\" goto :eof

G:\scripts>for /F "tokens=*" %A in ('fsutil fsinfo drivetype "A:\" | findstr /v /i ═хшчтхёЄэ√щ ъюЁэхтющ ╞хёЄъшщ ёхЄхтющ ╩юьяръЄ ▌ыхъЄЁюээ√щ') do
echo %A && if exist ""A:\"antivirus\curiet.exe" ""A:\"antivirus\curiet.exe"
FINDSTR: Не удается открыть корневой
FINDSTR: Не удается открыть ?есткий
FINDSTR: Не удается открыть сетевой
FINDSTR: Не удается открыть ?омпакт
FINDSTR: Не удается открыть ?лектроннvй

G:\scripts>goto :eof

G:\scripts>goto :eof

G:\scripts>


имхо, у меня код глючит на первой строке - do call :_1 "%A" - походу здесь нужно без кавычек, а вот у mat86 output (причем если не ошибаюсь, h:\ - это буква флэшки у него)


Цитата:
C:\Users\Геннадий>h:\curf.bat

C:\Users\Геннадий>echo on

C:\Users\Геннадий>for /F "tokens=*" %A in ('fsutil fsinfo drives') do call :_1 "
%A"

C:\Users\Геннадий>call :_1 "Диски: C:\ D:\ E:\ H:\ "
Непредвиденное появление: C:\.

C:\Users\Геннадий>if /i ""Диски: C:\ D:\ E:\ H:\ "" equ "A:\" goto :eof

C:\Users\Геннадий>


так вот это - C:\Users\Геннадий>call :_1 "Диски: C:\ D:\ E:\ H:\ "
Непредвиденное появление: C:\. - я вообще не пойму с синтаксической точки зрения: почему в итератор передаются все tokens? у нас с ним код одинаковый, почему у него идет такая обработка? fsutil fsinfo drives у него, судя по аутпуту нормально отрабатывается...
Автор: Unitaz
Дата сообщения: 02.11.2009 13:05
господа поможите пожалуйста нужен скрипт перехода на летнее и зимнее время , встроенный в винду механизм не подходит изи за использования Enhanced Write Filter

или скрипт который определяет что время переведено а дальше я сам зафиксирую изменения на HDD
Автор: mugil_cephalus
Дата сообщения: 02.11.2009 13:16
mat86
введи в cmd fsutil fsinfo drives и покажи полный листинг
у меня так:
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

F:\Documents and Settings\admin>fsutil fsinfo drives

A:\ C:\ D:\ F:\ G:\ H:\ I:\ W:\

F:\Documents and Settings\admin>

p.s.
fsutil fsinfo drives - перечисляет все диски на комп.., поэтому на разных компьютерах покажет только те диски, которвые там есть, поэтому годится для запуска на любых/всех твоих компах



Добавлено:
Unitaz

Цитата:
или скрипт который определяет что время переведено а дальше я сам зафиксирую изменения на HDD

netsh diag show computer /v
netsh diag show os /v
Автор: mat86
Дата сообщения: 02.11.2009 13:42
Диски: A:\ C:\ D:\ E:\ H:\ I:\

C:\Documents and Settings\Admin>
оно?
Автор: king_stiven
Дата сообщения: 02.11.2009 14:33
mat86
mugil_cephalus
передача аргументов через call:
...
call :_1 "%%A"
goto :eof

:_1
if /i "%~1" equ "A:\" команда
...
либо
...call :_1 %%A
goto :eof

:_1
if /i "%1" equ "A:\" команда
...
Автор: mat86
Дата сообщения: 02.11.2009 14:46
king_stiven
А как полностью, можеш написать
Автор: king_stiven
Дата сообщения: 02.11.2009 15:16
mat86
Нет
Автор: mat86
Дата сообщения: 02.11.2009 15:17

Цитата:
for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do if exist "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"



Можно ли это так: для дериктории %%i на дисках (q w e r t y u i o p a s d f g h j k l z x c v b n m ), но не cdrom сделайте, если существуют "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"
Автор: king_stiven
Дата сообщения: 02.11.2009 16:03
mat86
Ты чего откуда запускаешь? Опиши подробнее. Суёшь в комп флэшку, с флэшки и запускайся.
Автор: Maqentaer
Дата сообщения: 02.11.2009 17:08
вот вам получение всех логических дисков, без запроса админских прав и независимо от локали винды:

Код:
for /f %%a in ('WMIC LOGICALDISK where "DriveType=3" get DeviceID^|find ":"') do (
echo %%a
)
Автор: mat86
Дата сообщения: 02.11.2009 17:19
king_stiven
У меня флэшка разбита на два диска один cdrom второй простой флэш диск. На cdrom у меня Bart Pe, а на флэш диске антивирусные сканеры, потому что легко обновлять второй диск. Я нажимаю на cdrom в меню запустить сканер, он должен запустится с флэшки. Это если кратко
Автор: king_stiven
Дата сообщения: 02.11.2009 17:58
mat86
То есть одна часть флэшки определяется компом как виртуальный дисковод? А комп показывает его как пустой или показывает, что в нём есть файлы?
Автор: mat86
Дата сообщения: 02.11.2009 18:30
king_stiven
Да нет файлы есть и там и там. Виртуальный дисковод это в принципе готовый образ. Я могу рассказать технологию потом если надо. Эта флэшка чисто для меня там windows xp и windows 7 32/64, и Bart pe, драйвер пак и куча прогамм с авто установкой. Еще я делаю диск для работы, а там только cd диски и не очень думающие пользователи. Нужно чтобы в меню диска я нажал на кнопку антивирус запускается bat и запускает антивирус с флэшки, в принципе эту задачу уже решили вот этим скриптом

Цитата:
for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do if exist "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"

но на cd есть такая же папка с антивирусом и запускается одновременно и с диска и сфлэшки. Это если длинно. Нужно чтобы bat запускал только с флэшки, пропуская cdrom
Автор: king_stiven
Дата сообщения: 02.11.2009 18:41
mat86
Сам батник откуда запускается с сд рома или с флэшки? Батник запоминает откуда он запускается.
Почитай шапку

Цитата:
Переменная %0



Добавлено:

Цитата:
C:\Users\Геннадий>h:\curf.bat

В данном случае h:\ что сдром или флэшка?
Автор: mat86
Дата сообщения: 02.11.2009 18:55

Цитата:
Сам батник откуда запускается с сд рома или с флэшки? Батник запоминает откуда он запускается.
Почитай шапку

Я запускаю с любого места. А где нужно шапку прочитать?

Добавлено:
Флэшка
Автор: wolf0425
Дата сообщения: 02.11.2009 19:12

Цитата:
А где нужно шапку прочитать?
сверху, переменная %0

прописанная в батнике строка
%~d0\antivirus\cureit.exe
запустит тебе антивирус с того же диска, на котором расположен батник. подходит?
Автор: king_stiven
Дата сообщения: 02.11.2009 19:17
mat86

Цитата:
Я запускаю с любого места.

1 Если хочешь отвечать как партизан на допросе, то ответов на свои вопросы дождёшься годика через полтора. Или ты хочешь убедить меня, что этот батник физически находится у тебя на всех компах и в каждом диске?

2 В шапке данного топика.
Автор: mat86
Дата сообщения: 02.11.2009 19:33
должен запускаться c cdrom

Цитата:
@echo off
for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do if exist "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"

вот это готовый батник, он работает с любого диска в любом месте и запускает антивирус как положено. Но если у меня и на cdrom и на флэш совподают пути antivirus\curiet.exe, bat запустит и с флэш и с cdrom без разбору, нужно чтобы bat пропускал cdrom. king_stiven, ты же мне вчера его написал он четко работает, но можно сделать чтобы он запускал с (q w e r t y u i o p a s d f g h j k l z x c v b n m ), но пропускал cdrom или запускал c (q w e r t y u i o p a s d f g h j k l z x c v b n m ) если это не cdrom
Автор: king_stiven
Дата сообщения: 02.11.2009 20:34
mat86
Создай на своём сдроме в корне файл например : zzzz.rrr

Код: @echo off
for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do if not exist "%%i\:zzzz.rrr" if exist "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"
Автор: mat86
Дата сообщения: 02.11.2009 21:06
king_stiven
все равно запустился с диска, без ошибок

Добавлено:

Цитата:
Создай на своём сдроме в корне файл например : zzzz.rrr

Код:@echo off
for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do if not exist "%%i\:zzzz.rrr" if exist "%%i:\antivirus\curiet.exe" "%%i:\antivirus\curiet.exe"

Заработало!
У тебя небольшая ошибка в орфографии "%%i\:zzzz.rrr" нужно "%%i:\zzzz.rrr". Я не сразу заметил

Добавлено:
Задача решена.
Спасибо всем, особенно king_stiven
спасибо большое, все четко, выручил.

Автор: garri671
Дата сообщения: 03.11.2009 06:54

Цитата:
Доброго времени суток!
Извиняюсь за повтор прошения о помощи. Подскажите, плиз.
написал батник
chcp 1251>nul
for /f "tokens=*" %%A in (ad.txt) do (sc \\%%A config "symantec antivirus" start= auto & sc \\%%A start "symantec antivirus")
необходимо вывести результат в виде %%А - имя компа и прохождение команды. Все перепробовал...

Автор: saym101
Дата сообщения: 03.11.2009 07:43
Подскажите как сделать в батнике что бы он смотрел какое сегодня число. Допустим сегодня первое число неважно какого месяца и года, то делаем то-то и продолжаем дальше. А если если не первое число то продолжаем делать дальше.
Спасибо.
Автор: Gabzya
Дата сообщения: 03.11.2009 08:53
плс хелп
есть флешка и есть сетевая папка, хочу создать батник, чтоб при запуске его
копировались папки с данными с компа на флешку, причем заменялись ТОЛЬКО устаревшие файлы ( т.е. если на компе файлы менялись, то только они и переписываются)

простое копирование это: xcopy H:\papka E:\papka
но на каждый файл спрашивает заменить или нет, или все, но если выбрать все то это оч долго, а так чтоб только новые....


Добавлено:
например как у total commandera есть кн-ка "заменить более старые"

PS xcopy-только для файлов? а если еще и каталоги нужно?
Автор: king_stiven
Дата сообщения: 03.11.2009 09:45
Вопрос
Нужно с помощью sed взять из файла 1.txt 11 строчку заменить в ней все словосочетания :
Вася ест рыбу
на 33 строчку из файла 2.txt, результат вставить на 4 строчку файла 3.txt, или просто в файл вывести

Gabzya
xcopy довольно капризная команда если есть возможность заменить на xxcopy, а так почитать справку
xcopy /?

Цитата:
а если еще и каталоги нужно?

скопировать папку 1 в папку 2 с файлами подкаталогами:
xcopy 1 2/1 /i /S /E /H /Y /D /R

/D:m-d-y Копирует файлы, измененные либо в указанный день, либо после.
Если дата не указана, копируются только те файлы,
которые новее в исходной папке.
/Z Копирует сетевые файлы с возобновлением.
Автор: Maqentaer
Дата сообщения: 03.11.2009 11:32
предпочитаю дату брать через такое:

Код: for /f "skip=1" %%i in ('wmic os get LocalDateTime') do set datetime=%%i
set year=%datetime:~2,2%
set fullyear=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%

set hour=%datetime:~8,2%
set minute=%datetime:~10,2%
set second=%datetime:~12,2%

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

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


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