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

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

Автор: Nagual
Дата сообщения: 31.07.2008 23:58
set "greater=q1"
set "greater=q2"
set "greater=q3"
ну здесь и т.д. вроде как должно быть set "greater=%q1%"
по крайней мере без %% у меня не работало
Автор: Elroir
Дата сообщения: 01.08.2008 00:04
Nagual
Тогда ты неправильно сформулировал вопрос -
Цитата:
надо определить большую из переменных

Не самое большое число, а самую большую переменную - вот мой код и выдает название переменной с самым большим числом.
Автор: Nagual
Дата сообщения: 01.08.2008 00:15
Elroir
ессно переменную, спорить не буду

set "greater=%q1%"
set "tmp_var=%q1%"
if %q2% gtr %tmp_var% set "greater=%q2%"&set "tmp_var=%q2%"
if %q3% gtr %tmp_var% set "greater=%q3%"
echo greatest var = %greater%

вот что мне нужно было
работает отлично, спасибо
Автор: lamener
Дата сообщения: 01.08.2008 06:46

Код: set a=6
set b=2
set /a c=a/b

Результат является целым числом
Автор: 01MDM
Дата сообщения: 01.08.2008 08:47
lamener


Цитата:
А мне нужно дробное !
Например :
800/600=1,333333333333333333 и нужно округлить до 1,3


При помощи clcc.exe

Код:
@echo off
set eval=800/600
for /f "tokens=2" %%i in ('clcc %eval%') do set result=%%i
set result=%result:~0,3%
echo %result%
Автор: lamener
Дата сообщения: 01.08.2008 09:28
Я наверно уже достал всех своими вопросами !! Ну уважаемые без вашей помощи никак не получатся !! Мне нужно огранизовать паузу !! Нашел тут на форуме скрипт от Smitis, а он у меня не работает !!

Код: @set @x=0 /* Это строка должна быть первой. Далее идёт основной текст командного файла
@echo off
:: Сдесь что-то делаем до паузы
:: Сдесь делаем паузу, для примера, 10 секунд (10000 миллисекунд)
cscript //nologo /e:jscript "%~f0" 10000
:: Сдесь продолжение текста командного файла
:: В нём опять могут быть паузы, например, пол секунды
cscript //nologo /e:jscript "%~f0" 500
:: И ещё что-нибудь
:: Следующая строка должна быть последней
goto:eof */ if(isFinite(WScript.Arguments(0))) WScript.Sleep(WScript.Arguments(0))
Автор: RMR
Дата сообщения: 01.08.2008 09:49
lamener Для паузы юзай ping>nul 127.0.0.1 -n 6, где -n кол-во секунд +1
Автор: lamener
Дата сообщения: 01.08.2008 11:32
Народ !! Подскажите куда прописывать всякий дополнительный софт, что б можно было без пути им пользоваться !!
Автор: 01MDM
Дата сообщения: 01.08.2008 11:58
lamener

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


Клади в системную переменную %PATH%. Или создай свою (пользовательскую) переменную %PATH%

Реестр: HKEY_CURRENT_USER\Environment, в которой пропишешь пути к папкам, из которых будут исполняться файлы без полных путей

set path покажет синтаксис

Автор: RMR
Дата сообщения: 01.08.2008 12:18
Не пойму почему этот код

Код: @echo off
cd %~dp0
set ext="*.cmd" "*.jpg" "*.gif" "*.png" "*.tiff" "*.bmp"
dir %ext% /o:d /t:c /s >temp.dat
for %%i in (%ext%) do (
for /F "tokens=1 delims= " %%j in ('find "%%~nxi" "temp.dat"') do echo %%i %%j
)
pause
Автор: 01MDM
Дата сообщения: 01.08.2008 13:24
RMR
А такие варианты устроят? С временем:

Код:
@echo off
pushd Z:\PictureFolder
set ext=*.cmd *.jpg *.gif *.png *.tiff *.bmp
for /f "tokens=*" %%i in ('dir /b /s %ext%') do (
    echo %%~ti %%~nxi
)
popd
pause
Автор: RMR
Дата сообщения: 01.08.2008 14:00
01MDM Спасибо. Не знал про %%~ti. Вот что получилось:

Код: @echo off
title Copy by Date
set ext="*.cmd" "*.jpg" "*.gif" "*.png" "*.tiff" "*.bmp"
for %%i in (%ext%) do (
for /f "tokens=1 delims= " %%j in ("%%~ti") do (
    echo Копирование файла %%i в \%%j
    echo F | xcopy /y "%%~i" "%%j\%%~nxi" >nul
    if errorlevel 1 call :error "%%i"
    )
)
pause
goto :eof

:error
echo Ошибка при копировании файла %1
goto :eof
Автор: dimchik2002
Дата сообщения: 01.08.2008 16:53
Добрый день всем!

Проконсультируйте, пожалуйста, по поводу написания батника.

Задача: в директории имеется n файлов. необходимо вычислить последний файл, который был создан в этой директории и скопировать его в другую директорию.

с помощью команды DIR я создал список файлов в файле filelist.txt. Искомый файл на первой строке находится. Применяются атрибуты:
- обратная сортировка по дате создания файла
- выводить только файлы.

dir /O:-D /B "путь_к_директории_с_файлами" > filelist.txt

необходимо, что батник вытащил из файла первую строку и запомнил ее в переменной (например %filename%) и далее подставил в путь для копирования.

xcopy "путь_к_директории_с_файлами\%filename%" c:\arhive

Заранее прошу прощения, если повторяю чьи-то вопросы... Просто срочно надо...
Автор: king_stiven
Дата сообщения: 01.08.2008 17:31
dimchik2002

Цитата:
Задача: в директории имеется n файлов. необходимо вычислить последний файл, который был создан в этой директории и скопировать его в другую директорию.


Код: for /f "tokens=*" %%c in ('DIR "путь_к_директории_с_файлами" /B /T:C /O:-D /A:-D') do (
xcopy "путь_к_директории_с_файлами\%%c" c:\arhive
goto :eof
)
Автор: VitRom
Дата сообщения: 03.08.2008 12:05
Elroir, спасибо за совет по проблеме с переменными внутри for /f. Такого варианта присвоения я не знал, иногда он оказывается полезен. Хотя в том конкретном случае даже этот способ всё равно не помог и решение оказалось другим (ниже).

Возможно, кому-нибудь ещё пригодится, поэтому вкратце опишу задачу и решение.


Задача:

Выделить командой for /f часть результата работы команды с аргументами.
Код: FOR /f "<options>" %%V in ('<program> <argument> <some file>') do <process %%V>
Автор: Nagual
Дата сообщения: 03.08.2008 14:28
где-то было давно и не раз, но уже искать нет времени
у кого под рукой, может выложит
есть команда и список файлов
надо взять из списка две строки и привести к виду:
команда параметр1 параметр2
Автор: dimchik2002
Дата сообщения: 04.08.2008 13:08
king_stiven

Большое спасибо!

Единственное, что пришлось сменить имя goto :eof на другое, например :_ffiles
А то в дальнейшем все команды, которые я писал, игнорировались...
Автор: lamener
Дата сообщения: 04.08.2008 14:21
может кто подскажет где тут ошибка ???

Код:
@echo off
cd /d "D:\folder"
if exist 1.wmv (
for /f "tokens=2 delims=: " %%a in ('D:\Setups\MediaInfo_0.7.7.4_CLI_Win32\mediainfo 1.wmv ^| find "Width"') do set file_width=%%a
for /f "tokens=2 delims=: " %%a in ('D:\Setups\MediaInfo_0.7.7.4_CLI_Win32\mediainfo 1.wmv ^| find "Height"') do set file_height=%%a
echo %file_width%x%file_height%
)
Автор: 01MDM
Дата сообщения: 04.08.2008 16:17
lamener
Ты в пределах одного блока кода if () присваиваешь переменным file_* значение, а потом их используешь (echo).


Код:
@echo off
setlocal enabledelayedexpansion
...
...
echo !file_width!x!file_height!
)
Автор: TLD
Дата сообщения: 04.08.2008 16:52
Доброго времени суток!
Взялся написать систему резервного копирования баз 1С, все получилось кроме:
у меня создается папка с тек. датой, в нее сыпятся архивы в формате 7z.001, 002, 003 и.т.д по 4 ГБ, суть в том, что это должно записываться Nero'й, один файл у меня получается записать, а как можно <b>создать цикл</b>, который <b>найдет все файлы</b> (001, 002) и последовательно отдаст их Nero, на запись?

код:

Код:
@Echo Off
Set dt=%Date%
Set dtDay=%dt:~0,2%
Set dtMonth=%dt:~3,2%
Set dtYear=%dt:~6,4%

Set dt=%dtDay%_%dtMonth%_%dtYear%
mkdir H:\%dt%\
pause
7z.exe a -t7z H:\%dt%\1C.7z D:\1C\ -mx=7 -4g -ms=on
rem Nerocmd.exe --write --drivename f --real --speed 4 --iso Filial H:\%dt%\1C.7z.001
Автор: 01MDM
Дата сообщения: 04.08.2008 18:10

Цитата:
создать цикл...
...найдет все файлы


Если в папке нет посторонних файлов (только файлы для записи)

Код:
for %%i in ("H:\%dt%\*") do (
Nerocmd.exe --write --drivename f --real --speed 4 --iso Filial "H:\%dt%\%%i"
echo Change Disk
pause 1>nul
)
Автор: TLD
Дата сообщения: 04.08.2008 20:15
Спасибо! Если не затруднит, а где можно почитать подробнее про вот эти переменные %%i и прочие, изучил все материалы из шапки, и часть топиков нигде не встретилось.
Автор: Elroir
Дата сообщения: 04.08.2008 21:03
TLD

Цитата:
а где можно почитать подробнее про вот эти переменные %%i и прочие, изучил все материалы из шапки, и часть топиков нигде не встретилось

http://www.intuit.ru/department/os/compromtwin/3/
Автор: 01MDM
Дата сообщения: 04.08.2008 21:07
TLD

Цитата:
а где можно почитать подробнее про вот эти переменные %%i

В справочнике по командам (%windir%\help\ntcmds.chm)
В интернете можно найти как описание отдельных команд, так и альтернативные справочники
Ну и `help for` или `for /?` тоже несет некоторую информацию.
Автор: Rabben
Дата сообщения: 05.08.2008 03:45
Напишите мне шаблон такого скрипта:
1. замена файла
2. запись данных в реестр
Зарание спасибо
Автор: merphy69
Дата сообщения: 05.08.2008 09:11
доброго утра, уважаемые!

есть задача, создавать архив, имя которого содержит текущее время, делаю так:

%time:~0,2%_%time:~3,2%

проблема в том что до 10 утра эта строка не отрабатывает, вероятно из за того что час не имеет ведущего нуля (9 вместо 09), в связи с чем прошу помощи.
пордскажите как подправить скрипт чтоб работал в любое время?
Автор: Svjt
Дата сообщения: 05.08.2008 09:28
Сталкивался с таким, правда время не принимало там участия, тебе надо просто задать час как переменную и проверять больше она 10 или нет

У меня вышло примерно так:


Код:
if /I %hour% LSS 10 (set r_time=0%hour%
) else (set r_time=%hour%)
Автор: VitRom
Дата сообщения: 05.08.2008 09:35
а ещё лучше вообще всегда ещё при установке (или потом в панели управления) заходить в доп. настройки локали и сразу исправлять этот идиотизм (спасибо Билли за такие умолчания)
Автор: merphy69
Дата сообщения: 05.08.2008 09:51
Svjt, спасибо, но не подходит. дело в том что %time:~0,2% выводит не "9" а " 9", и из за лишнего пробела не получается использовать приведенный вами скрипт, а как убрать этот пробел я ума не приложу... использовать %time:~1,1% нельзя, тк в 10 часов например будет "0" вместо "10"

VitRom, к сожелению изменить настройки локали в данной задаче нельзя((

Автор: 01MDM
Дата сообщения: 05.08.2008 10:07
merphy69


Код:
set t=%time:~0,2%_%time:~3,2%
set t=%t: =0%
echo %t%

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Сброс пароля администратора


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