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

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

Автор: BVV63
Дата сообщения: 18.11.2009 13:07
01MDM
Проверил, действительно значение переменной вытаскивается в вашем примере из под SetLocol. Хотя я и не понимаю почему... Но в моём случае почему-то не работает.
Может, подскажете в чём дело? Привожу фрагмент в оригинальном виде.

[MORE]
Set ExclamationMark=!
SetLocal EnableDelayedExpansion
For /F "Skip=12 Tokens=*" %%A In ('%SystemRoot%\System32\Reg.exe Query "HKLM\System\CurrentControlSet\Services\EventLog"') Do (
    "%SystemRoot%\System32\Reg.Exe" Query "%%A /V "File" && (
        Set EvtFile=
        @For /F "Skip=2 Tokens=3-28" %%a In ('%SystemRoot%\System32\Reg.Exe Query "%%A" /V "File"') Do (
            @For %%A In (%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r %%s %%t %%u %%v %%w %%x %%y %%z) Do (
                If "%%A" Gtr " " (
                    Set EvtFile=!EvtFile! %%A
                    )
                )
            )
        Set EvtFile=!EvtFile:~1!
        Echo "!EvtFile!">> %Log%
        Copy /Y "!EvtFile!" D:\Events\%CurrentDay%\*.*>> %Log% || (
            Set /A Failures=Failures+1
            Echo. >> %Log%
            Echo ^>^>^>^>^>^>^>^> FAILURE!ExclamationMark!!ExclamationMark!!ExclamationMark!>> %Log%
            Echo Ôàéë "!EvtFile!" íå áûë ñêîïèðîâàí.>> %Log%
            Echo. >> %Log%
            )
        )
    )
Echo !Failures!>> %Log%
EndLocal & (
    Echo %Failures%>> %Log%
    )
[/MORE]
Предпоследнее Echo возвращает правильные данные, а последнее - "ECHO is off."

Добавлено:
Только русский текст в одном из Echo исказился. Видимо из-за настроек в моём браузере.
Автор: wolf0425
Дата сообщения: 18.11.2009 15:07
BVV63
Цитата:
Хотя я и не понимаю почему...

потому что до начала исполнения интерпретатором endlocal , в строке с которой открывается скобка, преобразуются в строки все операторы заключенных в те скобки команд

теперь о твоем батнике:

когда ты писал команду
Echo %Failures%>> %Log%
ты наверно хотел написать
>> %Log% Echo %Failures%
или (Echo %Failures%) >> %Log%
а не перенаправление в лог седьмого (как я вижу по эху %Failures%) потока вывода команды Echo

зачем в этом батнике вообще EndLocal ? или это только фрагмент, дальше еще что-то идет?

что и куда копирует команда Copy /Y "!EvtFile!" D:\Events\%CurrentDay%\*.*
звездочки ставятся на маске источника, а не на маске назначения

"%SystemRoot%\System32\Reg.Exe" Query "%%A /V "File" &&
нечетное число "

хватит пока, разбирайся.

Добавлено:
по моему ты хотел написать как-то так:

Код: @echo off
chcp 1251
set log=log
echo %date% %time% >log
set Destdir=.\Events\
SetLocal EnableDelayedExpansion

For /F "Skip=12 Tokens=*" %%A In ('%SystemRoot%\System32\Reg.exe Query "HKLM\System\CurrentControlSet\Services\EventLog"') Do "%SystemRoot%\System32\Reg.Exe" Query "%%A" /V "File" 1>nul 2>nul && (
Set EvtFile=
For /F "Skip=2 Tokens=3-28" %%a In ('%SystemRoot%\System32\Reg.Exe Query "%%A" /V "File"') Do For %%A In (%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r %%s %%t %%u %%v %%w %%x %%y %%z) Do If "%%A" Gtr " " Set EvtFile=!EvtFile! %%A
1>>%Log% 2>&1 (
Echo !EvtFile!
call Set EvtFile=!EvtFile:~1!
copy /y "!EvtFile!" %Destdir% 1>nul
if errorlevel 1 (
        Set /A Failures=Failures+1
        Echo.
        Echo ^>^>^>^>^>^>^>^> FAILURE^!^!^!
        Echo Файл "!EvtFile!"не был скопирован.
        Echo.
)
)
)
>> %Log% Echo errorcount=!Failures!

exit
Автор: wolf0425
Дата сообщения: 18.11.2009 19:21
вот получил в переменной время в GMT, примерно такое
set eventtime=Wed, 18 Nov 2009 11:45:06 GMT

а нужно мне напечатать - сколько это локального времени.
Можно на это как-то винды напрячь? Хранить и самому прибавлять часовой пояс из батника как-то не хочется
Автор: 01MDM
Дата сообщения: 18.11.2009 20:03
wolf0425

Цитата:
Можно на это как-то винды напрячь?

В PoSh'е легко:

Код:
PS > get-date -f HH:mm:ss "Wed, 18 Nov 2009 11:45:06 GMT"
14:45:06
PS >
Автор: VisioNRU
Дата сообщения: 18.11.2009 20:31
Доброго времени суток!!!!
Нужна помощь! есть инсталлер его необходимо запускать из батника
пишу

call %CD:~0,2%\путь\setup.exe
или
start %CD:~0,2%\путь\setup.exe
или
start .\путь\setup.exe

в общем инсталлер стартует, но потом пишет:
Необрабатываемое исключение. установка будет прервана.
и все. все бы ничего НО. Тут же вручную (мышью, клавой и тд) запускаю этот инсталлер и все ставится.
Умные мира сего, подскажите плз... думаю что проблема в путях, (относительные,постоянные )
Автор: FeelThePain
Дата сообщения: 18.11.2009 20:42
Помогите написать фаил со след действиами

1. Создать каталог К1
2. Создать каталог K2.
3. В катологе К1 создать фаил а1 в котором содержится текст 111
4. Проверить содержание фаила a1 , добавить текст 222, сохранить фаил с новим содержанием.
5. Зделать копию фаила а1 в катологе К1 с названием a2
6. Скопировать фаилы a1 un a2 в котолог K2.
7. Переити в каталог K2 и проверть содержания фаила a1 un a2 (каталог K2!).
8. Переиминовать в каталоге K2 фаилы a1 и a2 в b1 и b2.
9. Удалить фаилы a1 и a2 из каталога K1.
10. Удалить каталог K1.
11. Удалить фаилы b1 и b2 из каталога K2.
12. Удалить каталог K2.
Автор: mugil_cephalus
Дата сообщения: 18.11.2009 20:46
wolf0425
сомневаюсь, что это тебе поможет, знаю только как узнать локальный часовой пояс и состоние перехода на летнее время через консоль (актуально, если локалки в разных часовых поясах)
Автор: king_stiven
Дата сообщения: 18.11.2009 21:37

Цитата:
FeelThePain


Цитата:
1. Создать каталог К1
2. Создать каталог K2.

md "К1"
md "K2"
Автор: FeelThePain
Дата сообщения: 18.11.2009 22:17
Спасибо задание зделал
md k1
md k2
cd k1
edit a1
edit a1
copy a1 a2
copy *.* C:\DOCUME~1\FEELTH~1\k2
CD C:\DOCUME~1\FEELTH~1\k2
edit a1
edit a2
ren a1 b1
ren a2 b2
CD C:\DOCUME~1\FEELTH~1\k1
DEL a*
CD C:\DOCUME~1\FEELTH~1\k2
DEL b*
CD C:\DOCUME~1\FEELTH~1
rd k1
rd k2

мозет кто поможет как зделать для етого bat фаила что когда запускаеш название каталога и фаилов были как пораметры каторые надо указывать при старте
Автор: bredonosec
Дата сообщения: 18.11.2009 22:43

Цитата:
били как пораметры катории

научитесь хоть русскоязычной грамотности ((((

set /P parameter_1=vvedite takoj-to parametr
Автор: FeelThePain
Дата сообщения: 19.11.2009 07:09
[q][/q]
Я введу этот код запросит он у меня параметор введу его и он создас папку с таким именем и будет делать с ней эти мадификацыи? Тока как это так если на данный момент все параметры прописаны уже.
Автор: BVV63
Дата сообщения: 19.11.2009 07:21
wolf0425

Цитата:
потому что до начала исполнения интерпретатором endlocal , в строке с которой открывается скобка, преобразуются в строки все операторы заключенных в те скобки команд

Благодарю за разъяснения.

Цитата:
когда ты писал команду
Echo %Failures%>> %Log%
ты наверно хотел написать
>> %Log% Echo %Failures%
или (Echo %Failures%) >> %Log%

Большое спасибо. Я считал команды
Echo %Failures%>> %Log%
и
>> %Log% Echo %Failures%
эквивалентными. Однако, Вы правы, первая не работала, а вторая сработала на ура.

Цитата:
зачем в этом батнике вообще EndLocal ? или это только фрагмент, дальше еще что-то идет?

Да, фрагмент, причём процедуры, так что EndLocal требуется.

Цитата:
звездочки ставятся на маске источника, а не на маске назначения

Согласен, на маске назначения они не мешают, но просто бессмысленны.

Цитата:
"%SystemRoot%\System32\Reg.Exe" Query "%%A /V "File" &&
нечетное число "

Эту фразу я, честно говоря, не понял.

Цитата:
по моему ты хотел написать как-то так:

Ну да, примерно. Спасибо за помощь начинающему батанику!
Автор: king_stiven
Дата сообщения: 19.11.2009 07:25
FeelThePain
Срочно учить русский язык.
Автор: mugil_cephalus
Дата сообщения: 19.11.2009 08:38

Цитата:
Срочно учить русский язык.

может это школьник-акселератор или вундеркинд, и it-грамоту он освоил быстрее другой
Автор: king_stiven
Дата сообщения: 19.11.2009 09:11
mugil_cephalus
с кавказским акцентом
Автор: FeelThePain
Дата сообщения: 19.11.2009 09:12
русский не совсем мой радной язык + привычка писать латинскими буквами
Автор: mugil_cephalus
Дата сообщения: 19.11.2009 09:35
king_stiven
на кавказе так: детство-аксакал (вместо детсво-отрочество-юность-...)
FeelThePain

Цитата:
русский не совсем мой радной язык + привычка писать латинскими буквами

втроая моя версия, что ты украинец (но не стал писать, сейчас все нервные, за шовиниста примут: чуть что, - так сразу паспорт )
Автор: BVV63
Дата сообщения: 19.11.2009 09:44
Подскажите, пожалуйста, можно ли в конструкции For... In... Do... в In () использовать переменные (наверняка ведь можно, только не понятно, как)? Перебрал уже кучу способов - всё напрасно. Напр., (если в консоли) выполнить:

Set Disks= C D E
For /F "Tokens=1-26" %A In ("%Disks%") Do Echo %A
или
For /F "Tokens=1-26" %A In ('Echo %Disks%') Do Echo %A

Echo отрабатывает только для C, все последующие буквы игнорируются.
Автор: FeelThePain
Дата сообщения: 19.11.2009 10:07
нет я из другой страны. Ладнно это всё весело но кто-нибуть поможет мне с моим вопроссом ?
Автор: mugil_cephalus
Дата сообщения: 19.11.2009 10:15
BVV63
Set "Disks= C D E" - так более правильно
попробуй do echo %A %B %C
Автор: king_stiven
Дата сообщения: 19.11.2009 10:17
BVV63

Цитата:
For %A In (%Disks%) Do Echo %A

Автор: mugil_cephalus
Дата сообщения: 19.11.2009 10:46
FeelThePain
чтоб в md k1 параметр "k1" вводился при запуске батника - c:\>1.bat k1 ??
Автор: BVV63
Дата сообщения: 20.11.2009 06:12
Подскажите, пожалуйста, можно ли как-то из вывода программ (при перенаправлении его в файл) удалить пустые строки?
Я попробовал в For... In... Do..., но там работает лишь если программа отработала удачно, а если программа обнаружила ошибку, то вывод почему-то вообще отсутствует. Может, конечно, это специфика определённой программы (я использовал команду "Net Time").
В этой теме я натыкался на Set /P, но не смог с ним разобраться.
Автор: mouser
Дата сообщения: 20.11.2009 08:05
как с ФТП получить файлы по маске(file*) а затем все полученые файлы удалить с ФТП

Автор: BVV63
Дата сообщения: 20.11.2009 08:07
И ещё вот такой вопрос. При выполнении батника в контексте локальной системы команда
Net Time /Domain:"UserDNSDomain" /Set /Yes
отлично отрабатывает, говорит что на контроллере домена время такое-то и такое-то и что синхронизация успешно выполнена.
А вот команда
Echo "UserDNSDomain">>%LogFile%
Выводит "Echo is Off.".
Я посредством "AT /Interactive" (запускает задание в контексте локальной системы) открыл консоль, выполнил "Set", действительно под системой ни переменной "UserDNSDomain", ни "UserDomain" не существует. Соответственно, Echo и не выводит её. Но тогда как объяснить, что переменная работает в "Net Time" (без ключа "/Domain" получаю ответ, что сервер времени не найден)?
Автор: mouser
Дата сообщения: 20.11.2009 08:15
вот есть пример ... но если за это время появится еще один файлик ???
open IP port
login
pass
cd /dir
prompt
mget file*
mdelete file*
quit


Добавлено:
то есть нужно чтоб список скачанных файлов затем по этому списку удалились файлы
Автор: king_stiven
Дата сообщения: 20.11.2009 10:03
Так. я вижу вы sed занялись? Нужно вывести 154 строку с 14 символа вида
        тут текст идёт            </div>
то есть с начала 154 строки пропускаем 13 символов Tab , затем нужный текст оставляем, затем все Tab ы после нужного текста и </div> игнорируем.

mouser
Тебе непонятно как из готового списка файлов удалить их?
Автор: mouser
Дата сообщения: 20.11.2009 10:30
к примеру mget file* начинает копировать файло на локалку

копирование:
1.txt - processed
2.txt - processed
3.txt - processed
4.txt - process
5.txt -

и к примеру появляется файл 3_1.txt то есть в очередь копирования он не попал, а на след. команде его прибъют (((
Автор: king_stiven
Дата сообщения: 20.11.2009 10:54
mouser
mget это что команда? запусти её через goto, для подробного приведи копирование подробнее.
Автор: mouser
Дата сообщения: 20.11.2009 11:04
ну вот пример пока копируется fringe_1.avi на фтп появляется fringe_2.avi
результат: fringe_1.avi скопировался, а fringe_2.avi удалился (( потому что его не было перед запуском mget


open IP port
login
pass
cd /input_output
prompt
mget fringe*
mdelete fringe*
quit

call ftp -s:ftp.ini

mget - копирует файлы с фтп

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

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


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