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

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

Автор: wolf0425
Дата сообщения: 07.06.2007 15:58
mitrichbel а чем тебя мой (692) код не устроил, если циферки проверять не надо?
последние слова строк он вроде исправно сравнивает...
Автор: mitrichbel
Дата сообщения: 07.06.2007 16:07
wolf0425
я ещё ни один не пробовал. эти файлы дома, а я туда третий день добраться не могу 8)
Автор: Sovdep
Дата сообщения: 07.06.2007 16:15
наиболее продвинутая:
MediaInfo.exe
MediaInfo.dll


Код: General #0
Complete name : D:\AVI\Джеки Браун.mpg
Format : MPEG-2 Program
Format/Family : MPEG-2
File size : 6.36 GiB
PlayTime : 2h 24mn
Bit rate : 6303 Kbps
Writing library :
Mar 2 2006

Video #0
Codec : MPEG-2 Video
Codec profile : Main@Main
Codec settings/Matri : Custom
PlayTime : 2h 24mn
Bit rate : 9000 Kbps
Bit rate mode : CBR
Width : 720 pixels
Height : 576 pixels
Aspect ratio : 4/3
Frame rate : 25.000 fps
Standard : PAL
Chroma : 4:2:0
Interlacement : Interlaced
Bits/(Pixel*Frame) : 0.868
Writing library :
Mar 2 2006

Audio #0
Codec : MPEG-1 Audio layer 2
PlayTime : 2h 24mn
Bit rate : 192 Kbps
Bit rate mode : CBR
Channel(s) : 2 channels
Sampling rate : 32 KHz
Resolution : 16 bits
Video0 delay : -40ms
Writing library : Xing (new)
Автор: JohnRD
Дата сообщения: 07.06.2007 16:32
добрый день

каким образом получить в MS Outlook текст по русски

Код:
blat -to ivanov@mail.ru -server smtp.mail.ru -f 11@rambler.ru.ru -subject test -body "это тест"
Автор: igor_andreev
Дата сообщения: 07.06.2007 16:51
JohnRD
-charset windows-1251
Автор: JohnRD
Дата сообщения: 07.06.2007 17:15
igor_andreev

круто,

Код:
mode con codepage select=1251 > nul
blat -to ivanov@mail.ru -server smtp.mail.ru -f 11@rambler.ru.ru -charset windows-1251 -subject test -body "это тест"
Автор: Elroir
Дата сообщения: 07.06.2007 17:27
mitrichbel

Цитата:
Но по твоей ссылке - код Maza Faka, который, как я понял, только для частного случая?

Да действительно - дал неправильную ссылку
Вот правильная - http://forum.ru-board.com/topic.cgi?forum=62&topic=10650&start=660#21
И да - тот код Maza Faka заточен под двузначные числа в конце.

Добавлено:
JohnRD
Попробуй убрать дефис в последней строчке.
Автор: Sovdep
Дата сообщения: 07.06.2007 20:50
Способ wolf0425 ('type PSNR ^| grep "Video stream"') работает изумительно. Честное слово, я уже и не надеялся. Подлянка оказалась совсем в другом


Код: D:\AVI>for /F "tokens=*" %G in ('mencoder.exe -ss 120 -endpos 5 "Джеки Браун.mpg
" -vc mpeg12 -sws 9 -vf pp l5 crop 694:568:18: scale 576:432:0:0:2:::0 hqdn3d 8:
16:8:8 softskip -passlogfile "Джеки Браун.log" -ovc xvid -xvidencopts threads 2:
aspect 4/3:max_key_interval 125:max_bframes 2:bquant_ratio 163:bquant_offset 0:n
ogreyscale:chroma_opt:chroma_me:nointerlacing:nopacked:noqpel:nogmc:nocartoon:no
lumi_mask:trellis:hq_ac:me_quality 6:vhq 2:bvhq 1:curve_compression_high 5:curve
_compression_low 5:bitrate 1300:quant_type h323:pass 2:psnr -af channels 1 -oac
mp3lame -lameopts cbr:br 96:aq 1:lowpassfreq 14000:mode 3 -o "Джеки Браун.avi" -
force-avi-aspect 4/3' |grep -E "Video stream"^|Average') DO @SET [VB]=%G

Error parsing option on the command line: -xvidencopts
Автор: Maza Faka
Дата сообщения: 08.06.2007 07:38

Цитата:
но ставить ^перед = в двух десятках опций - НИКОГДА!

Sovdep
А ты попробуй такую конструкцию:

Код:
@echo off
for /f "usebackq tokens=*" %%a in (`"type readme.txt | find /i "install""`) do echo %%a
Автор: mitrichbel
Дата сообщения: 08.06.2007 10:02
Elroir
Попробовал - примерно через минуту думанья он выдал "Слишком длинная командная строка. Ошибка в синтаксисе команды"
Автор: Sovdep
Дата сообщения: 08.06.2007 10:12
При внимательном рассмотрении видно, при передаче в () вырезаются симводы "=" "," ";"
Пайпер-то | как раз цел. Попробовал, usebackq (``) не помог - ни одного знака =,; не появилось.

Оставил я эту идею с потоковой обработкой. Эксперименты, считаю очень плодотворными. Спасибо всем за помощь и участие.

На Конструкции FOR написал отдельный анализатор log-файла. Там сверху вниз идет. Теперь надо сделать анализатор Videobitrate, для этого надо загрузить из файла PSNR две последние строки в две переменные. Есть какие-то общепринятые решения, вроде #tail?


Автор: wolf0425
Дата сообщения: 08.06.2007 10:42
Sovdep

Цитата:
надо загрузить из файла PSNR две последние строки в две переменные.

не парься - не той длины тот лог, чтоб от скипанья что-то выиграть.

setlocal enabledelayedexpansion
for /F "tokens=*" %%a in (log.txt) do set "var2=!var1!" & set "var1=%%~a"
Автор: Sovdep
Дата сообщения: 08.06.2007 11:16
Слушай, ты в каких доках такие модификаторы находишь?!
Я такую конструкцию пробовал с %var1%, а заработало с твоими !var1!
Что это вообще такое "!"
Автор: KapralBel
Дата сообщения: 08.06.2007 11:24
Sovdep
во встроенной помощи винды Set /?
Автор: Sovdep
Дата сообщения: 08.06.2007 11:53
Вот это да. Кто бы подумал, что такие фичи возможны!
!VAR! проведение сопоставления во время выполнения. Это что, из бейсика такие конструкции?

А какой завораживающий язык описания. Так специалисты по маркетингу с лохами разговаривают
Автор: bios
Дата сообщения: 08.06.2007 13:11
Если подитожить раздел Работа с текстом, датой, и файлами >> Использование даты на день раньше чем сегодня
c учетом и високосных годов и разного формата времени из за версии Windows

ПОЛУЧЕНИЕ ВЧЕРАШНЕЙ ДАТЫ

то может получится это:
back_date.cmd

[more]
@ECHO OFF
TITLE CUTDATE 0.0.1 Authors: Igor Andreev, Kirillhome, bios
REM ECHO.

REGEDIT /EA TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"

FOR /F "TOKENS=2 DELIMS==" %%A IN ('FIND /I "sDate" TEMP.REG') DO SET DATE_SEPARATOR=%%A
SET DATE_SEPARATOR=%DATE_SEPARATOR:~1,-1%
REM ========= ПРОВЕРКА =========
REM ECHO. DATE_SEPARATOR = %DATE_SEPARATOR%

FOR /F "TOKENS=2 DELIMS==" %%A IN ('FIND /I "sShortDate" TEMP.REG') DO SET DATE_FORMAT=%%A
SET DATE_FORMAT=%DATE_FORMAT:~1,-1%
FOR /F "TOKENS=*" %%A IN ('DATE /T') DO SET SHORT_DATE=%%A
REM ========= ПРОВЕРКА =========
REM ECHO. DATE_FORMAT = %DATE_FORMAT%
REM ECHO. SHORT_DATE(DATE /T) = %SHORT_DATE%

SET FIRST_LETTER_SHORT_DATE=%SHORT_DATE:~0,1%
REM ========= ПРОВЕРКА =========
REM ECHO. FIRST_LETTER_SHORT_DATE = %FIRST_LETTER_SHORT_DATE%
REM ECHO.

FOR /L %%A IN (0 1 9) DO IF "%FIRST_LETTER_SHORT_DATE%" EQU "%%A" SET SEPARATOR_FLAG=YES
REM ========= ПРОВЕРКА =========
REM IF DEFINED SEPARATOR_FLAG (ECHO. ALL OK, DATE /T WITHOUT WEEKDAY) ELSE REM (ECHO. ACHTUNG, WEEKDAY HERE)
REM ECHO.

FOR /F "TOKENS=1-4 DELIMS=%DATE_SEPARATOR% " %%A IN ('DATE /T') DO (
IF DEFINED SEPARATOR_FLAG CALL :MY_FORMAT %%A %%B %%C
IF NOT DEFINED SEPARATOR_FLAG CALL :MY_FORMAT %%B %%C %%D
)

REM ========= ГЛАВНАЯ ПРОВЕРКА =========
REM ECHO. RESULT: Day=%DAY% Month=%MONTH% Year=%YEAR%

DEL TEMP.REG>NUL
set T_DATE=%DAY%.%MONTH%.%YEAR%

IF %T_DATE:~0,1%==0 (
SET /A T_DAY=%T_DATE:~1,1%) else (
SET /A T_DAY=%T_DATE:~0,2%)

IF %T_DATE:~3,1%==0 (
SET /A T_MONTH=%T_DATE:~4,1%) else (
SET /A T_MONTH=%T_DATE:~3,2%)

SET /A T_YEAR=%T_DATE:~6,4%

set /A T_DAY=%T_DAY%-1
if %T_DAY%==0 (
SET /A T_MONTH=%T_MONTH%-1
if %T_MONTH%==0 (
set /A T_YEAR=%T_YEAR%-1
SET /A T_MONTH=12
set /A T_DAY=31)
else (
if %T_MONTH%==1 (Set /A T_Day=31)
if %T_MONTH%==2 (Set /A T_Day=28)
if %T_MONTH%==3 (Set /A T_Day=31)
if %T_MONTH%==4 (Set /A T_Day=30)
if %T_MONTH%==5 (Set /A T_Day=31)
if %T_MONTH%==6 (Set /A T_Day=30)
if %T_MONTH%==7 (Set /A T_Day=31)
if %T_MONTH%==8 (Set /A T_Day=31)
if %T_MONTH%==9 (Set /A T_Day=30)
if %T_MONTH%==10 (Set /A T_Day=31)
if %T_MONTH%==11 (Set /A T_Day=30)
if %T_MONTH%==12 (Set /A T_Day=31)
)
)

REM ======================================================
REM ЗДЕСЬ МЫ ОПРЕДЕЛЯЕМ, В КАКОМ ВИДЕ НАМ НАДО ПОЛУЧИТЬ ВЧЕРАШНЮЮ ДАТУ
REM ТУТ Я ПОЛУЧАЮ ЕЁ В ТАКОМ ВИДЕ: YYYY_MM_DD
REM ======================================================
if %T_MONTH% LSS 10 (if %T_DAY% LSS 10 (set I_DATE=%t_Year%_0%t_Month%_0%t_Day%) else set I_DATE=%t_Year%_0%t_Month%_%t_Day%) else (set I_DATE=%t_Year%_%t_Month%_%t_Day%)
rem echo %I_DATE%

REM =========== НАШ КОД ПРОГРАММЫ ===========

echo %I_DATE%

REM =========== КОНЕЦ НАШ КОД ПРОГРАММЫ ===========
:MY_FORMAT
IF "%DATE_FORMAT%"=="dd%DATE_SEPARATOR%MM%DATE_SEPARATOR%yyyy" (SET DAY=%1&SET MONTH=%2&SET YEAR=%3)
IF "%DATE_FORMAT%"=="dd%DATE_SEPARATOR%MM%DATE_SEPARATOR%yy" (SET DAY=%1&SET MONTH=%2&SET YEAR=%3)
IF "%DATE_FORMAT%"=="d%DATE_SEPARATOR%M%DATE_SEPARATOR%yyyy" (SET DAY=%1&SET MONTH=%2&SET YEAR=%3)
IF "%DATE_FORMAT%"=="d%DATE_SEPARATOR%M%DATE_SEPARATOR%yy" (SET DAY=%1&SET MONTH=%2&SET YEAR=%3)

IF "%DATE_FORMAT%"=="MM%DATE_SEPARATOR%dd%DATE_SEPARATOR%yyyy" (SET DAY=%2&SET MONTH=%1&SET YEAR=%3)
IF "%DATE_FORMAT%"=="MM%DATE_SEPARATOR%dd%DATE_SEPARATOR%yy" (SET DAY=%2&SET MONTH=%1&SET YEAR=%3)
IF "%DATE_FORMAT%"=="M%DATE_SEPARATOR%d%DATE_SEPARATOR%yyyy" (SET DAY=%2&SET MONTH=%1&SET YEAR=%3)
IF "%DATE_FORMAT%"=="M%DATE_SEPARATOR%d%DATE_SEPARATOR%yy" (SET DAY=%2&SET MONTH=%1&SET YEAR=%3)

IF "%DATE_FORMAT%"=="yyyy%DATE_SEPARATOR%MM%DATE_SEPARATOR%dd" (SET DAY=%3&SET MONTH=%2&SET YEAR=%1)
IF "%DATE_FORMAT%"=="yy%DATE_SEPARATOR%MM%DATE_SEPARATOR%dd" (SET DAY=%3&SET MONTH=%2&SET YEAR=%1)
IF "%DATE_FORMAT%"=="yyyy%DATE_SEPARATOR%M%DATE_SEPARATOR%d" (SET DAY=%3&SET MONTH=%2&SET YEAR=%1)
IF "%DATE_FORMAT%"=="yy%DATE_SEPARATOR%M%DATE_SEPARATOR%d" (SET DAY=%3&SET MONTH=%2&SET YEAR=%1)

[/more]

ЭТУ программу можно вызвать из своего батника:
CALL back_date.cmd

а потом юзать переменную %I_DATE%
Автор: presston
Дата сообщения: 08.06.2007 14:53
Добрый день!!

Такой вопросик. Можно ли написать батник который автоматом менял прокси сервер на машине ( мы вводим новый прокси в сети и каждому менять вручную просто нет времени)???


Пасиба!
Автор: Elroir
Дата сообщения: 08.06.2007 15:34
presston
Менять прокси где? В интернет эксплорере?

bios

Цитата:
c учетом и високосных годов

А где у тебя проверка високосного года?
Автор: presston
Дата сообщения: 08.06.2007 17:01
Elroir, ага в нем ( была бы сказка если б во всех сразу браузерах, но хотя б в эксплорере)
Автор: Elroir
Дата сообщения: 08.06.2007 17:17
presston
Если сетевое имя прокси-сервера известно, тогда можно воспользоваться следующей конструкцией:

Код:
@echo off
for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Tracing""`) DO call :setproxy %%I
goto :EOF

:setproxy
echo %1
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyServer" /d %1:8080 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyOverride" /d "<local>" /f > nul
reg add "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Microsoft\windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
Автор: JohnRD
Дата сообщения: 08.06.2007 17:33
день добрый

можно ли такое сделать:

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

типа \\comp\dir\%newfile%

спасибо
Автор: presston
Дата сообщения: 08.06.2007 17:44

Цитата:
presston
Если сетевое имя прокси-сервера известно, тогда можно воспользоваться следующей конструкцией:

Код:
@echo off
for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Tracing""`) DO call :setproxy %%I
goto :EOF

:setproxy
echo %1
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyServer" /d %1:8080 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyOverride" /d "<local>" /f > nul
reg add "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Microsoft\windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul



SERVERNAME - надо заменить на имя прокси-сервера
Если порт прокси не 8080, в коде надо заменить на правильный.
Код написан для английской Windows. Если вывод команды tracert на русском - надо первой строчкой написать "chcp 1251>nul", а вместо "Tracing" написать "Трассировка".


сетевое имя и ип адрес - все известно. а зачем мы делаем трасировку? прокси и клиенты в одной сети

Автор: Elroir
Дата сообщения: 08.06.2007 17:57
presston

Цитата:
сетевое имя и ип адрес - все известно. а зачем мы делаем трасировку? прокси и клиенты в одной сети

Насколько я понимаю - ip прокси-сервера меняется, а имя нет. Поэтому и делается трассировка по имени, чтобы найти изменившийся ip. То есть на каждой машине надо запустить этот батник и он сам все сделает. Если надо - можно изменить батник так, чтобы он получал новый адрес прокси аргументом командной строки.
Автор: presston
Дата сообщения: 08.06.2007 18:06

Цитата:
presston

Цитата:сетевое имя и ип адрес - все известно. а зачем мы делаем трасировку? прокси и клиенты в одной сети


Насколько я понимаю - ip прокси-сервера меняется, а имя нет. Поэтому и делается трассировка по имени, чтобы найти изменившийся ip. То есть на каждой машине надо запустить этот батник и он сам все сделает. Если надо - можно изменить батник так, чтобы он получал новый адрес прокси аргументом командной строки.


пасиба. будем пробовать
Автор: Elroir
Дата сообщения: 08.06.2007 18:26

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

Что-то вроде такого:

Код:
@echo off
setlocal
for /f "tokens=*" %%a in ('dir /b /a-d /od /tc') do set "old_last=%%a"
::Running the program that creates new file
::====================================
echo 1>new_file2.txt
::====================================
for /f "tokens=*" %%a in ('dir /b /a-d /od /tc') do set "new_last=%%a"
if "%old_last%"=="%new_last%" (
set "new_last="
echo New file not found
) else (echo %new_last%)
Автор: wolf0425
Дата сообщения: 08.06.2007 21:26
JohnRD
Цитата:
далее отработает прога которая создаст файл в этой папке
после нужно обнаружить имя это нового файла и завести в переменную

если прога обязательно создаст новый файл, то запоминать ничего ненадо - надо просто взять самый новый файл в папке после запуска проги.
т.е. см. первый for /f от предшественника.
Автор: Elroir
Дата сообщения: 08.06.2007 21:35
wolf0425

Цитата:
если прога обязательно создаст новый файл

Tак именно поэтому я и делал два for-a - для проверки создания файла.
Автор: mitrichbel
Дата сообщения: 08.06.2007 21:53
Elroir
http://forum.ru-board.com/topic.cgi?forum=62&topic=10650&start=720#12
это ответ на http://forum.ru-board.com/topic.cgi?forum=62&topic=10650&start=660#21
что скажешь?
Автор: Elroir
Дата сообщения: 08.06.2007 22:12
mitrichbel
Так сложно что-либо понять. Попробуй следующий код:

Код:
@echo off
setlocal enabledelayedexpansion
echo.
for /r %%a in (*.txt) do call :check %%~na
echo after first for
echo sext=!sext!
for %%a in (!sext!) do (
echo Files grouped by "%%a" ending:
dir /s /b "* %%a.txt"
echo.
)
goto :EOF

:check
::maybe we found last two part of filename
echo trying %*
if "%3"=="" (
::if it realy consists of two parts
if not "%2"=="" (
set "test2=no"
set "test=%2"
    ::if second part is not zero
if not !test!==0 ( set /a "test1=!test!-1"
     ::if the result is -1 - it's not a number
     if not !test1!==-1 (set "test2=yes")
    ) else (
    ::if the second part is zero - OK, it's a number
    set "test2=yes")
    ::if we found number
    if !test2!==yes (
     ::check whether it is already in the list
     echo %fext% | find " %2 ">nul
     ::if not - add it to the list
if not !errorlevel!==0 (set "fext=!fext! %2 ") else (
     echo %sext% | find " %2 ">nul
     if not !errorlevel!==0 (set "sext=!sext! %2 ")
     )
    )
)
) else (
::the filename has more then 2 parts - shift it by 1 position to the left
shift
::try again
goto check
)
Автор: mitrichbel
Дата сообщения: 09.06.2007 07:45
Elroir
в консоли бегут строчки с "trying имя файла без расширения", некоторые из них повторяются, хотя присутствуют в единственном экземпляре (проверил)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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