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

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

Автор: Yuki2003
Дата сообщения: 25.07.2007 15:03
А проверить переменную на существование можно?

Ответили раньше чем спросил!

Добавлено:

Цитата:
Elroir
А если в переменной backup уже что-то было?

А различий между локальными и глобальными переменными нет? Если нет, тогда - да, вдруг в ней "уже что-то было".
Автор: Elroir
Дата сообщения: 25.07.2007 15:12
Yuki2003
Различия есть, если в начале кода используется команда setlocal. Но если есть глобальная переменная backup, a в локальной среде она не определена - используется значение глобальной переменной.
Пример:

Код: @echo off
:: Определяем глобальную переменную
set test=yes
:: Переходим в локальную среду
setlocal
:: Переменная test в локальной среде не определена, поэтому "echo %test%" выдаст yes
echo %test%
:: Определяем локальную переменную test
set test=no
::Переменная test в локальной среде определена, поэтому "echo %test%" выдаст no
echo %test%
:: Выходим из локальной среды
endlocal
:: В переменной test теперь снова yes
echo %test%
Автор: vmix
Дата сообщения: 25.07.2007 19:38
de1eted

Цитата:
последнее, что пришло в голову: Directory Opus логит все операции с файлами и может сохранить в txt, который можно отпарсить.


Да, DO логит нормально:

25.07.2007 13:30:38:
Move: C:\0\10\20\32\33\30.txt
To: C:\0\12\30\30.txt

и отпарсить можно, только лог надо вручную сохранять в файл.
Тоже вариант, спасибо!
Автор: MegaSin
Дата сообщения: 26.07.2007 07:18
Уважаемые гуру!
Появилась непростая (для меня) задачка...
Необходимо сделать прогресс-бар для функции заливки mysql дампа на сервер
Сломал всю голову.. не знаю как сделать, даже мысле нету
Если не дамп, то хотя бы для копирования файла
функция рдля работы с mysql у мну такая:

Код:
            :sqlquery
            for /f "tokens=1,2,3 delims=/" %%i in ('echo %*') do (
                set command=%%~i
                set page=%%j
                set outneed=%%k
            )
            if NOT DEFINED outneed set outneed=0
            %command% > temp.txt 2<&1
            set error=%errorlevel%
            if %error% GTR 0 (
                echo.
                echo НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
                echo Command - %command%
                echo.
                echo ErrorCode - %error%
                echo.
                echo Error
                type temp.txt
                echo.
                echo НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
                echo.
                echo =====================%date%===%time%================== >> %logfileerr%
                echo Page - %page% >> %logfileerr%
                echo Command - %command% >> %logfileerr%
                if exist temp.txt (
                    echo.>>%logfileerr%
                    echo Error:>>%logfileerr%
                    type temp.txt>>%logfileerr%
                    call eletefile temp.txt
                )
                echo ErrorCode - %error% >> %logfileerr%
                echo =============================================================== >> %logfileerr%
                goto :exitgi
            ) else (
                echo =====================%date%===%time%================== >> %logfile%
                echo Page - %page% >> %logfile%
                echo Command - %command% >> %logfile%
                echo Status - OK >> %logfile%
                echo =============================================================== >> %logfile%
                if /i NOT %outneed%==0 type temp.txt >> %outneed%
                call eletefile temp.txt
                exit /b 0
            )
Автор: 01MDM
Дата сообщения: 26.07.2007 07:30
Вряд-ли у тебя получится в одном скрипте и копировать-заливать, и в тоже время отображать прогресс процесса. Если только копировать как-нибудь по частям (по 1кб допустим), но тебе это надо?
Автор: MegaSin
Дата сообщения: 26.07.2007 07:38
01MDM
юзеры нервничают когда заливается дамп на 150 метров, да еще из навиката (порядка 10 минут), просят прогресс бар
думаю нужно делать start :метка и дальше идёт скрипт прогресс бара.. пока с фоновом режиме идет заливка дампа
Автор: JohnRD
Дата сообщения: 26.07.2007 08:05
Elroir
Maza Faka
wolf0425
спасибо работают красиво


Код: C:\.install\hosts>call set str=%str:X=X%
C:\.install\hosts>call set str=%str:Y=Y%
C:\.install\hosts>call set str=%str:Z=Z%
C:\.install\hosts>echo UCase(john) = JOHN
UCase(john) = JOHN
C:\.install\hosts>pause
Автор: KapralBel
Дата сообщения: 26.07.2007 08:51
JohnRD
IfMember из состава Windows Resource Kit
Автор: wolf0425
Дата сообщения: 26.07.2007 09:53
JohnRD

Цитата:
спасибо работают красиво
call set str=%str:Z=Z%
хотя и не пойму как?

Z при таком поиске не зависит от регистра. а призамене вставляется точно что написано.
Кстати откуда листинг - echo off в начале потерялся?


Цитата:
do call set str=%%str:%%a=%%a%%
если не сложно прокоментируйте, уроком на будующее..

do - огрызок от for, в котором кстати определяется %%a из заданного набора
call - вызвать батник или метку. почему и насколько законно в XP срабатывает call set xxx - я не знаю, но иногда это очень удобно для раскрытия переменных.

set str=%%str:%%a=%%a%%
В этой строке при вызове call будут произведены замены:
%%a заменится на значение этого счетчика FOR, прочие %% при вызове заменятся на %

К примеру в последнем цикле FOR %%a будет равно Z и произойдет вызов call set str=%str:Z=Z%
Автор: Maza Faka
Дата сообщения: 26.07.2007 09:58
JohnRD

Код:
@echo off
for /f "tokens=2 delims=*" %%a in ('net user %username%') do set group=%%a & goto :show
:show
Echo %username% is %group% member
Автор: 01MDM
Дата сообщения: 26.07.2007 10:04
MegaSin

Цитата:

думаю нужно делать start :метка и дальше идёт скрипт прогресс бара.. пока с фоновом режиме идет заливка дампа



Код:
@ECHO OFF

for /l %%i in (0,1,80) do (
    call:COPY
    set /p="#"<nul
    ping -n 3 localhost >nul
)
echo.
del "%temp%\cp.cmd" >nul 2>&1

:COPY
if exist "%temp%\cp.cmd" goto:eof
echo copy from to >"%temp%\cp.cmd"
echo exit >>"%temp%\cp.cmd"
start %temp%\cp.cmd
Автор: Maza Faka
Дата сообщения: 26.07.2007 10:09
MegaSin

Цитата:
сделать прогресс-бар

Вот пример, как это можно сделать:

Код:
@Echo off
Call :Pcopy "d:\Video\Films\movie.avi" c:\new
goto :eof

:Pcopy
Set Flagfile=%TEMP%\tmp.tmp
If Exist %Flagfile% Del %Flagfile%
start /min copy %* ^& Echo.^> %Flagfile% ^& Exit
Set /p var=Copying %~1 < NUL

:loop
Set /p var=. < NUL
ping -n 1 localhost>nul
if not exist %Flagfile% goto loop
Автор: 01MDM
Дата сообщения: 26.07.2007 10:15
еще после del допиши exit

Добавлено:
MegaSin

Вот слегка доработал, прогресс будет идти до конца копирования

Код:
@ECHO OFF
cls
echo.
for /l %%i in (0,1,2) do (
    :progress
    call:COPY
    set /p="#"<nul
    ping -n 2 localhost >nul
    if exist %temp%\cp.tmp goto:progress
)
:end
echo.
del %temp%\cp.cmd
goto:eof

:COPY
if exist %temp%\cp.cmd goto:eof
cd.>%temp%\cp.tmp
echo copy "source.file" "destinations" >>"%temp%\cp.cmd"
echo del "%temp%\cp.tmp" >>"%temp%\cp.cmd"
echo exit >>"%temp%\cp.cmd"
start %temp%\cp.cmd
:: hstart /nowindow "%temp%\cp.cmd"

Автор: MegaSin
Дата сообщения: 26.07.2007 12:59
вы просто супер!
Спасибо всем огромное. Буду встраивать
Автор: 01MDM
Дата сообщения: 26.07.2007 15:35
MegaSin
Метку :end убери, она не нужна
Автор: Yuki2003
Дата сообщения: 26.07.2007 17:20

Код: For /f "eol=;" %%a In ( List.txt ) Do (
Set test=%%a
Echo %%a
Echo %test )
Автор: KapralBel
Дата сообщения: 26.07.2007 17:25
Yuki2003
For /f "eol=;" %%a In ( List.txt ) Do (
Set test=%%a
Echo %%a
Echo !test! )
Автор: MsdLamer
Дата сообщения: 26.07.2007 17:25
помогите пожалуйста решить следующую задачку, средствами Bat файла:

допусти есть *.txt файлик с текстом

KACCA 1 61,456.91
KACCA 1 61,456.91
KACCA 2 89,546.95
KACCA 2 89,546.95

строки повторяются.

как сделать так чтобы осталось только

KACCA 1 61,456.91
KACCA 2 89,546.95

Только средствами BAT файла. К зачету надо. Спасибо.
Автор: Yuki2003
Дата сообщения: 26.07.2007 17:36

Цитата:
KapralBel
!test!

10х! Ну почему я этого в хэлпе на нашел
Автор: 01MDM
Дата сообщения: 26.07.2007 17:52
MsdLamer


Код:
@ECHO OFF

set etalon=0
for /f "delims=" %%i in ('type your.txt') do (
    set string=%%i
    call:compare
)
goto:eof

:compare
if "%etalon%"=="%string%" goto:eof
set etalon=%string%
echo %string% > new.txt
Автор: Elroir
Дата сообщения: 26.07.2007 17:58
01MDM

Цитата:
echo %string% > new.txt

Надо заменить на echo %string% >> new.txt
Автор: MsdLamer
Дата сообщения: 26.07.2007 18:02
ВСЕ НОРМАЛЬНО НО, В ФИНАЛЬНОМ ФАЙЛИКЕ ОСТАЕТСЯ ТОЛЬКО:

KACCA 2 89,546.95

А ГДЕ КАССА1?

Автор: Elroir
Дата сообщения: 26.07.2007 18:04
MsdLamer

Цитата:
ВСЕ НОРМАЛЬНО НО, В ФИНАЛЬНОМ ФАЙЛИКЕ ОСТАЕТСЯ ТОЛЬКО

Смотри мою поправку выше.

А одинаковые строчки идут одна за другой или вперемешку?
Автор: MsdLamer
Дата сообщения: 26.07.2007 18:13
echo %string% > new.txt ИСПРАВИЛ И ПОЛУЧИЛОСЬ?

KACCA 1 61,456.91
KACCA 1 61,456.91
KACCA 2 89,546.95
KACCA 2 89,546.95

ЧТО-ТО НЕ ТО....
СТРОКИ ИДУТ ОДНА ЗА ДРУГОЙ
Автор: Elroir
Дата сообщения: 26.07.2007 18:19
MsdLamer
Скорее всего это из-за пробелов в конце строк.
Или убери все пробелы или вот чуть измененный код 01MDM:

Код:
@echo off
set "etalon=0"
for /f "delims=" %%i in ('type kassa.txt') do (
set "string=%%i"
call :compare
)
goto :EOF
:compare
if "%etalon%"=="%string%" goto :EOF
set "etalon=%string%"
echo %string%>>new.txt
Автор: 01MDM
Дата сообщения: 26.07.2007 18:22
MsdLamer

Но если строки вперемешку то работать не будет
Автор: MsdLamer
Дата сообщения: 26.07.2007 18:24
СПАСИБО, выручил очень. Все работет. Еще раз спасибо.
Автор: KapralBel
Дата сообщения: 26.07.2007 21:01
Yuki2003

Цитата:
Ну почему я этого в хэлпе на нашел

Set /? >Set.help
и читаешь файлик Set.help
Автор: Maza Faka
Дата сообщения: 27.07.2007 07:22
MsdLamer
Ещё один вариант, учитывает и "перемешанные" строки:

Код:
@echo off

set text=your.txt
if exist tmp.tmp del /f /q tmp.tmp
copy nul tmp.tmp>nul

for /f "delims=" %%a in (%text%) do (
findstr /c:"%%a" tmp.tmp>nul || echo %%a>> result.txt
echo %%a>> tmp.tmp
)

for %%a in (tmp.tmp %text%) do del /f /q "%%a"
ren result.txt "%text%"
Автор: JohnRD
Дата сообщения: 27.07.2007 21:08
KapralBel
Maza Faka
спасибо за помощь

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

есть Symantec GostCast Server он предназначен для приема и оправки имиджей по сети, ожидая подключения клиентов Ghost, запускаться он может с команджной строки пример


Код: GhostSrv.exe c:\new\backup001.gho backup -D -С

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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