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

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

Автор: 5peciali5t
Дата сообщения: 02.06.2011 19:02
GORA2

Цитата:
Последняя версия умеет.

должно быть невнимательно ознакомился с ридми... каким образом должна выглядеть команда проверки файла на сервере с уже имеющимся у пользователя?
Автор: GORA2
Дата сообщения: 02.06.2011 19:10

Цитата:
каким образом должна выглядеть команда проверки файла на сервере с уже имеющимся у пользователя?


Код: DOWNLOAD+.EXE http://bomz-co.narod.ru/ENHANCER.zip
echo %ERRORLEVEL%
pause
Автор: 5peciali5t
Дата сообщения: 02.06.2011 21:48
GORA2
вообще вопрос был про конкретную реализацию. исходя из примера в вашем предыдущем посте как должен выглядеть код?
например у меня в папке с файлом download.exe есть файл ENHANCER.zip с датой создания более ранней чем доступная по указанному адресу, за счет чего в коде он сравнивает, откуда берет путь для сравнения файла (из папки старта download.exe имя файла в конце строки адреса) или как?

попробовал

FOR /f "delims=*" %%I IN ( 'DOWNLOAD.EXE 11 http://download.skype.com/SkypeSetupFull.exe' ) DO ECHO %%I
echo %ERRORLEVEL%
DOWNLOAD.EXE http://download.skype.com/SkypeSetupFull.exe
echo %ERRORLEVEL%

с рядом лежащим файлом SkypeSetupFull.exe 4-й линейки и последнего билда 5-ой
скрипт в любом случае качает последний файл и кладет рядом с текущим с именем
00_SkypeSetupFull.exe
01_SkypeSetupFull.exe
и т.д.

что мне надо поправить чтобы он сравнил дату создания файла в папке скрипта и на сервере и только в случае нахождения более нового файла качал его и заменял текущий?
Автор: GORA2
Дата сообщения: 02.06.2011 21:58
5peciali5t
В последнем архиве находятся два версии утилиты. Возможность сравнения имеется в версии у которой в конце имени стоит + (плюс), как у меня и показано предыдущем посте. Версия без + не имеет такой фичи и будет скачивать файл снова и снова с добавлением двухзначного префикса в имени скаченного файла (что у Вас и происходит).
Автор: 5peciali5t
Дата сообщения: 02.06.2011 22:30
GORA2
ура. теперь получилось. спасибо за разъяснения

upd: а нет ли там сравнения по Дате создания вместо Даты изменения?
Автор: mazafakermazafaka
Дата сообщения: 02.06.2011 23:10
Уважаемые bat-аники
Помогите одолеть проблему обратного слэша, уже несколько часов бьюсь - безрезультатно:

Код:
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "SourcePath" /t REG_SZ /d "%regValue%" /f
Автор: muk_as
Дата сообщения: 03.06.2011 02:06
подскажите пжлст
необходимо проверить значения ключа в реесте
и если он равен 1 то сделать первое_дело, а если равен другому значению то перейти во второе_дело

раздел
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\protected\AVP11\settings

ключ
EnableSelfProtection

значение
REG_DWORD 1

что то типа етого, только тут он ищет процесс в системе и если находит то окно выводит, необходимо так же и для реестра, если значение 1 то окно вывести, а если другое то перейти к след строке


Код:
tasklist | find "avp.exe"
if errorlevel 1 goto NoRecord
goto Sone

:Sone
chcp 1251
msg * Вы не вышли из KIS2011! Внимательнее читайте инструкцию.
exit

:NoRecord
Автор: 01MDM
Дата сообщения: 03.06.2011 05:34
mazafakermazafaka

Цитата:
Каким образом средствами DOS можно узнать, что последний символ значения переменной %regValue% является "\"?

Средствами DOS не знаю. А разве в DOS есть реестр? Если для виндовс, то приведи переменную к одному виду:

Код:
set "regvalue=%regvalue%\"
set "regvalue=%regvalue:\\=\%"
set "regvalue=%regvalue:~0,-1%"

reg add ... /d "%regvalue%" /f
Автор: GORA2
Дата сообщения: 03.06.2011 07:11

Цитата:
а нет ли там сравнения по Дате создания вместо Даты изменения?

Хмм... Так оно там и так по дате создания сравнивается.
Автор: BrateloSlava
Дата сообщения: 03.06.2011 10:00
== удалено == сам разобрался
Автор: 5peciali5t
Дата сообщения: 03.06.2011 11:23
GORA2

Цитата:
Хмм... Так оно там и так по дате создания сравнивается.

тьфу, т.е. наоборот по дате изменения (когда файл был собран)
Автор: muk_as
Дата сообщения: 03.06.2011 11:28
еще не подскажите нормальных bat2exe которые корректно работют с msg
а то батник вида
chcp 1251
msg * Вы не вышли из KIS2011! Внимательнее читайте инструкцию.
exit

работает
а конвертнув его в EXE с посощью quickbfc Quick Batch File Compiler пишет что

"msg" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Автор: res2001
Дата сообщения: 03.06.2011 11:46
Видимо выполняешь bat.ехе на системе где msg.exe не доступен.
Автор: muk_as
Дата сообщения: 03.06.2011 11:56
нашел да
c windows system32, а какая глобальная переменная отвечает за етот путь?

все в одной ос делаю - 7ка 64бит
батник вида
%winDir%\system32\msg.exe * Вы не отключили самозащиту KIS2011! Внимательнее читайте инструкцию.
все норм

ексе того же вида - ничего

а какими еще средствами можно сообщить юзеру об ошибке. но только не в черном окне исполнения бат файла
Автор: res2001
Дата сообщения: 03.06.2011 12:12
muk_as

Цитата:
c windows system32, а какая глобальная переменная отвечает за етот путь?

Вообще за поиск исполняемых файлов отвечает одна переменная - PATH
Этот каталог в нее уже включен изначально.


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

Можно с помощью vbs/js.
На js это выглядит так:
Создашь файл с расширением js и содржимым
WScript.echo("сообщение");

Запускать так:
wscript //Nologo file.js


Добавлено:
Но интерпретатор vbs/js - это тоже отдельная программа, наверняка она лежит там же.
Автор: muk_as
Дата сообщения: 03.06.2011 12:17
а нельзя ли это все в 1 батфайле сделать? без создания файла с 1 строчкой?
Автор: res2001
Дата сообщения: 03.06.2011 12:22
muk_as
Не понятно зачем тебе вообще батник нужен в этом случае, запускай сразу msg, без батника.

Подозреваю, что проблема связана с тем, что когда ты вызываешь бат, то он работает в 64битном окружении, где доступна команда msg, а когда создаешь exe, это получается уже 32битная прога, потому что Quick Batch File Compiler 32битный и в этом окружении msg.exe не доступна.

Добавлено:
И еще не понятно, зачем ты батник, содержащий 1 строку компилируешь. В чем скрытый смысл. Оставляй как есть - батником.
Автор: muk_as
Дата сообщения: 03.06.2011 12:30
да ето выдержка из кода


Код:
setlocal
IF EXIST "%ProgramFiles(x86)%" ( set "regpath=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\protected\AVP11\settings" ) else ( set "regpath=HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\protected\AVP11\settings" )

for /f "tokens=3" %%i in (' reg query "%regpath%" /v EnableSelfProtection ') do set /a "value=%%i"
if %value% equ 1 (goto:goaway0) else (goto:trustme0)

:goaway0
wscript //Nologo self.js
exit

:trustme0
tasklist | find "avp.exe"
if errorlevel 1 goto trustme1
goto goaway1

:goaway1
wscript //Nologo avp.js
exit

:trustme1
Автор: bandit82
Дата сообщения: 03.06.2011 16:35
Заранее извиняюсь если мой вопрос слишком простой, но поиском ничего не нашел.
Задача:
Нужно провести проверку по части имени компьютера в домене и выполнить команду если условие выполняется. Я это вижу так:

if %computername%=MAS* ...

т.е. для компьютеров MAS-12 и MAS0098 условие выполнится, а для MAG-33 не выполнится

Так правильно?
Автор: 01MDM
Дата сообщения: 03.06.2011 16:53
muk_as
А к чему необходимость в конвертации в exe? Обычно это делается если необходимо прикрепить какие-то дополнительные утилиты или другие нужные файлы. Чтоб не таскать целую папку.
Автор: wolf0425
Дата сообщения: 03.06.2011 16:59
bandit82
echo.%computername% | findstr /b /i "MAS" >nul && echo mas* computer

но для такого простого случая, когда строка сравнения известна уже в момент написания батника, можно и проще
if /i "%computername:~0,3%" equ "mas" echo mas* computer
Автор: 01MDM
Дата сообщения: 03.06.2011 17:03
bandit82
Нет не правильно. Оператор сравнения == не понимает подстановку. Проверить можно либо с помощью findstr:

Код:
echo %computername% | findstr /i /b "MAS" && echo success || echo wrong computer name
Автор: bandit82
Дата сообщения: 03.06.2011 17:34
wolf0425, 01MDM
Спасибо огромное!
Автор: muk_as
Дата сообщения: 03.06.2011 19:22
01MDM
необходимо чтобы скрыть код батника от посторонних глаз
Автор: 01MDM
Дата сообщения: 03.06.2011 20:21
muk_as

Цитата:
необходимо чтобы скрыть код батника от посторонних глаз

По сути это самообман. Все равно экзешник только контейнер, который распаковывается в %TEMP% и там выполняется батник. Вот почему msg.exe не отрабатывает? Наверное это зависит от системы. Например у меня на Win-7 HP он запрятан глубоко в \Windows\winsxs\. Естественно он не в %PATH%. добавь в батник поиск msg.exe:

Код:
for /f "tokens=*" %%i in (' dir /b /s /a-d %systemroot%\msg.exe ') do set "path=%path%;%%~dpi"
Автор: GORA2
Дата сообщения: 03.06.2011 21:28

Цитата:
Например у меня на Win-7 HP он запрятан глубоко в \Windows\winsxs\.

x64 ? Она все там же и x64 в C:\Windows\System32, только искать надо x64 приложением. ТС ее не находит, а windows-кий поиск нормально находит.
Автор: mazafakermazafaka
Дата сообщения: 04.06.2011 02:45
01MDM
Как-то привык, что в Win98SE командный интерпретатор по команде ver выводил, что он - MS-DOS 7.0, вот и написал про "средства DOS"

Спасибо большое за подсказку. Сделал правда чуть по другому, но направление вы дали верное У меня получилось так:


Код:
echo.
echo * Disabling SFC... (типа отключаем самозащиту файлов Windows)

rem Для поддержки русского в именах файлов
chcp 1251 >nul

rem Читаем ключи реестра

for /f "usebackq skip=2 tokens=2,*" %%i IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "SourcePath"`) DO (
set "SourcePathW=-%%j"
)

for /f "usebackq skip=2 tokens=2,*" %%i IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "ServicePackSourcePath"`) DO (
set "SourcePathSP=-%%j"
)

for /f "usebackq skip=2 tokens=2,*" %%i IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "SourcePath"`) DO (
set "SourcePathNT=-%%j"
)

rem Если значение переменной оканчивается на \, то добавляем еще один \ в конец
if "%SourcePathW:~-1%"=="\" set "SourcePathW=%SourcePathW%\"
if "%SourcePathSP:~-1%"=="\" set "SourcePathSP=%SourcePathSP%\"
if "%SourcePathNT:~-1%"=="\" set "SourcePathNT=%SourcePathNT%\"
rem Удаляем первый символ "-", добавленный при чтении ключей, чтобы избежать пустого значения переменной
set "SourcePathW=%SourcePathW:~1%"
set "SourcePathSP=%SourcePathSP:~1%"
set "SourcePathNT=%SourcePathNT:~1%"

chcp 866 >nul

rem Очищаем ключи реестра
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "SourcePath" /t REG_SZ /d "" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "ServicePackSourcePath" /t REG_SZ /d "" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "SourcePath" /t REG_SZ /d "" /f

===программа===

echo.
echo * Enabling SFC...

chcp 1251 >nul

rem Возвращаем значения ключей в реестр из переменных
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "SourcePath" /t REG_SZ /d "%SourcePathW%" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "ServicePackSourcePath" /t REG_SZ /d "%SourcePathSP%" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "SourcePath" /t REG_SZ /d "%SourcePathNT%" /f

chcp 866 >nul
Автор: AlexanderNON
Дата сообщения: 05.06.2011 13:13
Здравствуйте!
И все таки я снова подниму тему удаления файлов по дням недели. Очень надо.

Задача такая:
В папке примерно 400 архивов (*.rar). Нужно удалить все файлы из папки, оставив только те, которые были созданы в пятницу.

Начальник требует все "Пятничные" архивы записать на диски, но при мысли перебирать файлы вручную волосы встают дыбом по всему телу (таких папок больше десятка).
Автор: res2001
Дата сообщения: 05.06.2011 13:53
AlexanderNON
Проще всего определить день недели с помощью VBS/JS скрипта или задать дату пятницы в параметре.
Тебе как?
Автор: wolf0425
Дата сообщения: 05.06.2011 15:56

Цитата:
Нужно удалить все файлы из папки, оставив только те, которые были созданы в пятницу.
а это нужно однократно что-то рассортировать или настроить для каждой пятницы?
просто если для каждой - то настраиваешь шедулер на запуск батника вечером пятницы, в батнике удаляешь всё с датой "не сегодня"...


Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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