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

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

Автор: 01MDM
Дата сообщения: 22.12.2007 21:51
Wenzel

Код:
@echo off
set "var=C:\dir 1\dir 2\dir 3\file.ext"
call:var "%var%"
goto:eof
:var
echo %~dp1
Автор: Wenzel
Дата сообщения: 22.12.2007 21:54
king_stiven
SergPfor
01MDM
Спасибо, разобрался!

01MDM

Цитата:
call:var "%var%"
goto:eof
:var
echo %~dp1

Очень интересная конструкция, запомню на будущее.
Автор: compi
Дата сообщения: 22.12.2007 23:02
Помогите кто. хочу батником обновлять программу.

нашёл такой вот вариант на проверку версии программы

reg query "HKLM\SOFTWARE\программа\CurrentVersion\Info" /ve ProductVersion

мне нужно чтобы вывело на экран значение ProductVersion, без типа значения.
Т.е. по простому, хочу чтобы показало версию установленной ПРОГРАММЫ
И при условии, что версия ПРОГРАММЫ 1.0.0 начать установку обновления, а при условии, что версия ПРОГРАММЫ 2.0.0 пропустить установку обновления
Автор: Elroir
Дата сообщения: 23.12.2007 00:55
compi

Код:
@echo off
setlocal
for /f "skip=3 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\программа\CurrentVersion\Info" /v ProductVersion') do
if "%%а"=="2.0.0" goto after
:: Здесь установка обновления
...
...

:after
:: После обновления или при пропуске
...
...
Автор: compi
Дата сообщения: 23.12.2007 02:22
Elroir
спб. за быстрый ответ и помощь, но почему-то на машине где уже стоит последняя версия начинается установка обновления

Код:
@echo off
setlocal
for /f "skip=3 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\main\program\CurrentVersion\Info" /v ProductVersion') DO if "%%а"=="3.0.000.0" goto after
net use v: \\192.168.42.1\public\LAN
ping -n 5 localhost > nul
msiexec /package v:\setup
GOTO after
:after
ping -n 5 localhost > nul
Автор: Elroir
Дата сообщения: 23.12.2007 02:33
compi
Запусти из командной строки

Код:
reg query "HKLM\SOFTWARE\main\program\CurrentVersion\Info" /v ProductVersion
Автор: compi
Дата сообщения: 23.12.2007 02:38
Elroir


Код:
HKEY_LOCAL_MACHINE\SOFTWARE\main\program\CurrentVersion\Info
ProductVersion REG_SZ 3.0.000.0
Автор: Elroir
Дата сообщения: 23.12.2007 02:43
compi
ОК. Во первых, в моем коде, замени skip=3 на skip=4.
Во вторых - ты же сравниваешь с "3.0.000.0", а у тебя там 3.0.566.0? Или я чего-то не понимаю?
Автор: compi
Дата сообщения: 23.12.2007 02:51
да , запутался, с 3.0.566.0 , ноя только что поменял и skip=4 и версию.
стоит версия 3.0.566.0 с ней и нужно сравнить, чтобы понять, стоит ли ставить обновление, т.к. уже есть версия выше
Автор: Elroir
Дата сообщения: 23.12.2007 02:53
compi
Так сейчас работает или нет?
Автор: compi
Дата сообщения: 23.12.2007 02:57
Elroir
нет, всё ровно начинает инсталить, могу в ПМ весь код выслать
Автор: Elroir
Дата сообщения: 23.12.2007 03:03
compi
Вышли. Но ответ будет только завтра - спать надо.
Автор: compi
Дата сообщения: 23.12.2007 12:29
Elroir
слушай уже сломал себе голову, но установка происходит независимо от версии. что-то не так . Я всё перенабрал ручками, запустил батник на компе где стоит последняя версия ПРОГРАММЫ и всё ровно начинается установка обновления. Т.е. стоит версия 3.0.566.0, мы с ней сравниваем "%%а"=="3.0.566.0" и начинается установка обновления хотя по идее должен быть пропуск
Автор: 01MDM
Дата сообщения: 23.12.2007 12:52
compi
A ты уверен, что %%a получает нужное значение, попробуй изменить skip. Просто когда ты приводил пример вывода reg query, ты не указал заглавную строчку
Автор: Elroir
Дата сообщения: 23.12.2007 12:53
compi
OK. Давай попробуем по шагам.
1. Создаешь батник с таким кодом:

Код:
@echo off
for /f "skip=4 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info" /v ProductVersion') do echo "%%a"
Автор: compi
Дата сообщения: 23.12.2007 14:11
Elroir


Код: for /f "skip=4 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info" /v ProductVersion') do echo "%%a"
pause
Автор: 01MDM
Дата сообщения: 23.12.2007 14:47

Код:
set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"
for /f "tokens=3" %%a in ('reg query "%regpath%" ^| find "ProductVersion"') do echo "%%a"
Автор: slech
Дата сообщения: 25.12.2007 09:25
всем привет ещё раз.
опять со ввоим вопросом насчёт копирования файлов по сети из а в б
Файл копируются по заданию - но не всегда успешно - поэтому нужно проверять.

Цитата:

set /p "folder=Enter folder name : "
robocopy \\PC1\Pictures\%folder% \\PC2\Designers\Pictures\%folder% /S /E /R:2 /NP /XO /LOG:log.txt
blat log.txt -server mailserver -f user@domain.com -tf emaillist.txt -s "%folder% - pictures copy status" -log logblat.txt

1.Как включить в конструкцию что бы если не ввели значение папки(set /p "folder=Enter folder name : ") - тогда на выход, т.е. не делаем ничего.
2.Как заставить robocopy копировать файл если источник полный файл а адресат такой же файл но с нулевым размером ? Если включить опцию /XO - skip old? он просто всё пропускает. Если её выключть начинает всё переписывать.
3.Как в blat указать в теме письма русское слово ?
4.Как сделать dir и вывести списочек 2-ух, 3-ёх последних созданных папок ?

Спасибо.
Автор: king_stiven
Дата сообщения: 25.12.2007 10:29
slech

1.Как включить в конструкцию что бы если не ввели значение папки(set /p "folder=Enter folder name : ") - тогда на выход, т.е. не делаем ничего.

set /p "folder=Enter folder name : "
if "%folder%"=="" goto :eof
Автор: 01MDM
Дата сообщения: 25.12.2007 10:37
king_stiven
slech
Еще можно поставить setlocal, на случай если скрипт запускается несколько раз в одной сессии или:

Код:
set folder=? (Так как нельзя создавать папки и файлы с "?")
set /p "folder=Enter folder name : "
if %folder%==? goto :eof
Автор: slech
Дата сообщения: 25.12.2007 13:18
king_stiven
01MDM
Спасибо №1 готово.

nnbackup
AnyDifference <ON/OFF>

Определяет поведение nnBackup во время синхронизации каталогов. По умолчанию nnBackup копирует в приемный каталог все новые файлы из исходного каталога и все файлы с более "новой" датой создания или модификации. Выставив AnyDifference в ON, можно предписать nnBackup копировать и файлы, чья дата создания/модификации изменилась в противоположную сторону или не изменилась вовсе, но при этом изменился размер файла.

Аналог опции командной строки -ad.
то что нужно - правдо по лиценции программа не походит.
может кто знает кто так может ещё делать из бесплатного ?
в robocopy не нашёл такого.
Автор: NIKZZZZ
Дата сообщения: 25.12.2007 14:53
Есть такая задача. Нужно синхронизировать каталоги на двух машинах с помощью флэшки минимальными средствами. Одновременно машины недоступны.
1. Создаем текстовой файл на синхронизируемой машине , содержащий содержимое каталога + некоторый хеш (например размер, дату и т.п.) для каждого файла.
2. На другой машине запускаем батник, который должен создать на флэшке каталог, содержащий новые или обновленные файлы вместе со структурой каталогов + список удаленных файлов.
3. Синхронизация.

Я написал подобную штуку, но уж больно кривая получилась. Интересно было-бы взглянуть на это чужим взором.
Автор: compi
Дата сообщения: 25.12.2007 15:14
01MDM
привет. твой код прекрасная работает, но дальше я так и не сдвинулся. Сравнение идёт через команду If

Код: IF "%%a" GEQ "3.0.566.0" goto end2
Автор: 01MDM
Дата сообщения: 25.12.2007 15:47
compi
нельзя сравнить "число" 3.0.0.0.1 и "число" 3.0.0.0.2

Код:
set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"
for /f "tokens=3" %%a in ('reg query "%regpath%" ^| find "ProductVersion"') do (
echo ver.%%a
set oldVer=%%a
)

if %oldVer:.=% GEQ 305660 goto end2
Автор: king_stiven
Дата сообщения: 25.12.2007 16:02
compi

скобки поставь

set "regpath=HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"
for /f "tokens=3" %%a in ('reg query "%regpath%" ^| find "ProductVersion"') do (
if "%%a" GEQ "3.0.566.0" goto end2
)

код вместо %%a должен подставлять значение только внутри цикла for

Добавлено:
slech

4.Как сделать dir и вывести списочек 2-ух, 3-ёх последних созданных папок ?

Это отдельная задача, или идёт в контексте с робокопи?
Автор: antonn2
Дата сообщения: 25.12.2007 19:58
обошел три предыдущие темы, не нашел похожего, самому квалификации не хватает сотворить
Есть такая струкnура папок:
c:\one\111\
c:\one\222\
c:\one\333\
c:\one\444\
в каждой конечной папке лежат несколько файлов и файл log.txt.

мне нужно найти все "цифровые" папки в c:\one\ и скопировать этот самый log.txt их каждой папки в таком виде:
c:\temp\111_log.txt
c:\temp\222_log.txt
c:\temp\333_log.txt
c:\temp\444_log.txt

не могу составить батничек, ну пути нашел вроде, а мне с номерами нужно

Код: set diskk=c:\one
for /d %%i in ("%diskk%%~1*") do (
    echo %%i
)
Автор: 01MDM
Дата сообщения: 25.12.2007 22:09
antonn2


Код:
@echo off
for /d %%i in ("c:\one\*") do copy "%%i\log.txt" "c:\temp\%%~ni_log.txt"
Автор: slech
Дата сообщения: 25.12.2007 22:13
king_stiven

Цитата:
slech

4.Как сделать dir и вывести списочек 2-ух, 3-ёх последних созданных папок ?

Это отдельная задача, или идёт в контексте с робокопи?

это самое первое - для того что бы знать что вводить в качестве парамера для
set /p "folder=Enter folder name : "
Автор: antonn2
Дата сообщения: 25.12.2007 22:14
спасибище
а то я написал, а не знаю, точно ли оно отработает:

Код: set diskk=c:\one\
cd %diskk%
for /d %%i in (*) do (
if exist "%diskk%%%i" (
    echo %diskk%%%i
rem ну тут копирование
)
)
Автор: king_stiven
Дата сообщения: 25.12.2007 23:51
slech

for /f "tokens=*" %%c in ('DIR /t:c /a:d /o:-d /b') do echo %%c

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

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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