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

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

Автор: KapralBel
Дата сообщения: 12.01.2006 12:00
Zueuk
Скорее всего по нахождению в папке - включи сортировку по имени
FOR /F %%i IN ('dir /b /a-d /on D:\temp\*.txt') DO (echo %%i)
Автор: jak_forest
Дата сообщения: 12.01.2006 12:39
Zueuk

а еще можно сделать сортирвоку по дате создания
FOR /F %%i IN ('dir /b /a-d /o-d D:\temp\*.txt') DO (echo %%i)
в этом случае самый новый файл (или тот который последним редактировался) окажется на первой строчке.
Автор: Zueuk
Дата сообщения: 12.01.2006 14:06
KapralBel,jak_forest
Оба варианта подходят.

А второй вариант (пол дате создания) на моих примерах выдал

31223.txt
41223.txt
11223.txt
21223.txt

Хотя дата создания у всех файлов одна и та же (один файл переименовывал).
Опять микрософт чудит...
Автор: KapralBel
Дата сообщения: 12.01.2006 14:12
Zueuk
Если дата создания одна и таже - то сортировка идет по вхождению в каталог
ФАР Менеджер есть?
Нажми там Ктрл+Ф7 - получишь тот же результат
Автор: Zueuk
Дата сообщения: 12.01.2006 14:43
KapralBel
По вхождению в каталог, т.е. порядок добавления в каталог? Об этом не подумал.

PS Есил читал мой пост микрософт, то извини
Автор: KapralBel
Дата сообщения: 12.01.2006 14:56
Zueuk

Цитата:
По вхождению в каталог, т.е. порядок добавления в каталог

Не обязательно
Порядок следования файлов в каталоге (какая запись первая). При добавлении очередного файла вовсе не обязательно, что бы он занял первую свободную позицию в каталоге
Автор: Zueuk
Дата сообщения: 12.01.2006 15:14
KapralBel
Понятно.

Еще вопрос.
Сделал вот такую конструкцию:

set Counter=0
FOR /F %%i IN ('dir /b /a-d /on D:\temp\*.txt') DO (
echo %%i
Set /a %%Counter=%Counter%+1 )
echo %%Counter%

Она не работает. Вообщем наугад писал, т.к. о работе "циклов" (если вообще есть такое понятие в батниках) в описании ничего нет.

Идея: подсчитать количество файлов.

PS Посоветуйте что-нить почитать толковое и наиболее полное о батах. Есть chm файл стандартный, но его явно не хватает, приходится догадываться. А это время съедает, а время - деньги...
Автор: Alan Mon
Дата сообщения: 12.01.2006 15:22
Zueuk
Не надо никаких циклов

Код: dir /b /a-d /on D:\temp\*.txt | find /C "txt"
Автор: KapralBel
Дата сообщения: 12.01.2006 15:27
Zueuk

Код:
@Echo Off
set Counter=0
FOR /F %%i IN ('dir /b /a-d /on Log\*.Log') DO Call :Count %%i
echo %Counter%
GoTo :EOF

:Count
echo %1 %counter%
Set /a Counter=%Counter%+1
GoTo :EOF
Автор: Zueuk
Дата сообщения: 12.01.2006 15:41
Alan Mon
Решение одуренное по простоте, это возьму на заметку.

Меня требуется сохранение количества для дальнейших манипуляций.

KapralBel
Подходит, отлично!
Позволь вопрос оффтопный: ты в бате все время живешь?

Еще оффтоп
Нужно Балла Гейтса принудительно заставить запихнуть в дистриб Виндовса Перл!!!
Автор: KapralBel
Дата сообщения: 12.01.2006 16:05
Zueuk

Цитата:
Позволь вопрос оффтопный: ты в бате все время живешь?

Как сисадмин - обязан


Цитата:
Нужно Балла Гейтса принудительно заставить запихнуть в дистриб Виндовса Перл!!!

Кажеться ActivePerl - вешается в обработчик Windows Script Host наравне с JavaScript & Visual Basic Script
Автор: jak_forest
Дата сообщения: 13.01.2006 07:56
Zueuk
по поводу циклов. где-то читал (дословно не помню, но суть вот такая) что при нахождении цикла вместо переменных в циклах значение подставляется ОДИН раз перед началом первого исполнения цикла (исключения составляют родные "цикличные" переменные тип %%i).

Код: set Counter=0
FOR /F %%i IN ('dir /b /a-d /on D:\temp\*.txt') DO (
echo %%i
Set /a %%Counter=%Counter%+1 )
echo %%Counter%
Автор: andyics
Дата сообщения: 13.01.2006 13:44
Как к TIME прибавить например 1час 30 мин , какой формат времени ? если добавить 1 час , делаю
set t=%TIME%
set /a t1=t+1
echo %t1%
получаются только часы , минут и секунд нет....
Автор: MasterTheMAC
Дата сообщения: 13.01.2006 13:58
jak_forest

Проще вместо cmd /v:on внутри bat файла написать SETLOCAL ENABLEEXTENSIONS.
SETLOCAL /? - Помощь по SETLOCAL.
Автор: KapralBel
Дата сообщения: 13.01.2006 14:00
andyics

Код:
@Echo Off
Set tHour=%time:~0,2%
Set tMin=%time:~3,2%

Set tMin=45
Set tHour=23

Set /a tHour=%tHour%+1
Set /a tMin=%tMin%+30

If /i %tMin% GTR 60 ((Set /a tMin=%tMin%-60) & (Set /a tHour=%tHour%+1))

If /i %tHour% GTR 24 (Set /a tHour=%tHour%-24)

Set t
Автор: andyics
Дата сообщения: 13.01.2006 14:15
Как потом собрать это в одну переменную , чтобы как время подсунуть в at например ?
Автор: KapralBel
Дата сообщения: 13.01.2006 14:39
andyics
Set tFullTime=%tHour%:%tMin%:00
Автор: andyics
Дата сообщения: 13.01.2006 14:46
Разобрался...
Автор: DarkStar2000
Дата сообщения: 13.01.2006 16:22
есть файл *.ini
у которого много пустых строк
можно ли как нибудь удалить все пустые строки кроме тех которые разделяют секции
пример:
---------------------

[section1]
parametr1



parametr2

parametr3





[section2]
parametr1






parametr2
---------------------
нужно чтобы стало
---------------------
[section1]
parametr1
parametr2
parametr3

[section2]
parametr1
parametr2
---------------------
Автор: KapralBel
Дата сообщения: 13.01.2006 16:40
DarkStar2000

Код:
@Echo Off

Del Tmp.ini /q/f
Del Tmp1.ini /q/f
For /F %%a In (1.ini) Do Echo %%a >>tmp.ini
For /F %%a In (tmp.ini) Do Call :Sub1 %%a
GoTo :EOF

:Sub1
Set str=%1
Set str1=%str:~0,1%
If "%str1%"=="[" (Type empty >>tmp1.ini)
Echo %1>>tmp1.ini
GoTo :EOF
Автор: MasterTheMAC
Дата сообщения: 13.01.2006 17:08
KapralBel


Цитата:
Type empty >>tmp1.ini


Вместо этого можно написать echo. >>tmp1.ini, тогда никакого лишнего файла не надо.
Автор: KapralBel
Дата сообщения: 13.01.2006 17:19
MasterTheMAC
Сенькаю - "век живи - век учись"
Я всегда делал echo . >> - и оно вставляла точку, если же нет проблелп между точкой и это - вставляет пустую строку
Автор: asup
Дата сообщения: 13.01.2006 21:43
Smitis



Цитата:Но у меня не получается выти из зацикливания после %0, притом задачи выполняются непоследовательно а зацикливаются все задачи.....у меня открылось за пару секунд по 50 окон каждой задачи, мне нужна помощь, как это грамотно реализовать??????????

Попробуй использовать, например, переменные.

Код:
@echo off
if "level"=="1" goto second
:: здесь первая часть
set level=1
"%0"

:second
:: здесь вторая часть

exit

Идёт выполнение до сих пор......
@echo off
if "level"=="1" goto second
:: здесь первая часть
set level=1

а потом зацикливается """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" и вторую часть не выполняет?

Smitis в чём может быть ошибка?

Автор: Smitis
Дата сообщения: 15.01.2006 14:15
asup
Надо символы % вокруг переменной:
if "%level%"=="1" goto second
Извини, это у меня была оЧеПятка
Автор: Zueuk
Дата сообщения: 16.01.2006 09:49

Цитата:
Zueuk
по поводу циклов. где-то читал (дословно не помню, но суть вот такая) что при нахождении цикла вместо переменных в циклах значение подставляется ОДИН раз перед началом первого исполнения цикла (исключения составляют родные "цикличные" переменные тип %%i).

Код:set Counter=0
FOR /F %%i IN ('dir /b /a-d /on D:\temp\*.txt') DO (
echo %%i
Set /a %%Counter=%Counter%+1 )
echo %%Counter%

в трансляции будет иметь вид

Код:set Counter=0
FOR /F %%i IN ('dir /b /a-d /on D:\temp\*.txt') DO (
echo D:\temp\.......txt
Set /a %%Counter=0+1 )
echo 1

для приведения в нормальный вид этого кода надо запустить cmd /v:on
и код подправить на

Код:set Counter=0
FOR /F %%i IN ('dir /b /a-d /on D:\temp\*.txt') DO (
echo %%i
Set /a Counter=!Counter!+1 )
echo %Counter%

по крайней мере у меня в cmd /v:on
работает

Код:set count=0
for /l %%i in (5,-1,1) do (
echo %%i
set /a count=!count!+%%i
)
echo %count%
и выдает результат "15"
в справке немного написано про режим расширения
PS:у меня winxp на win 2000 тож работает


Спасибо. Это пригодится.
Автор: nat13ya
Дата сообщения: 18.01.2006 17:51
Приветик. Кто-нубудь знает, можно ли в батнике прописать временную задержку в несколько секунд. Через команду Schtasks, если я правильно поняла, можно задать наименьший интервал – минута. Но это много. Или такую штуку можно сделать в скрипте.vbs.
Спасибо.
Автор: MasterTheMAC
Дата сообщения: 18.01.2006 20:24
nat13ya

Работает в win2000 и выше. Зависит от формата времени в системе.
nSeconds - сколько секунд ждать (максимум 59).

set nCurrSeconds=%time:~6,2%
set /a nCheck=(nCurrSeconds+nSeconds)
if /i %nCheck% gtr 59 (set /a nCheck=nCheck-59)
:loop
if /i %time:~6,2% neq %nCheck% goto loop
Автор: jak_forest
Дата сообщения: 19.01.2006 07:46
nat13ya
можно еще использовать sleep или choice. не идут в стандартной поставке, но могу скинуть на e-mail (или если кто-нибудь объяснит как, то положить на этот сайт). еще проскакивали здесь где-то про варианты использования ping, но у меня не получалось через него сделать задержку.
Автор: surgutfred
Дата сообщения: 19.01.2006 08:45
Корифеи, подскажите. Вроде простая ситуевина, а копаться некогда.
Windows XP SP2
В FAR в командной строке набираю cd q: и перехожу на диск Q.
Пишу то же самое в bat файл и нифига не переходит, там же в директории с батником и остался.
Как может по другому писать?
Автор: ipmanyak
Дата сообщения: 19.01.2006 08:45
утилита sleep из рескита от w2k

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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