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

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

Автор: Elroir
Дата сообщения: 12.06.2007 15:42
RRRomb

Код: @echo off
chcp 1251>nul
Start "" "C:\WINDOWS\Главное меню\Программы\Автозагрузка\VIKPOPUP.EXE"
Автор: RRRomb
Дата сообщения: 12.06.2007 15:51
Спасибо Elroir
А можно ли сделать задержку на запуск файла
Например до полной загрузки всех процессов на компе и после чего запускать файл
И чем отличается
mode con codepage select=1251 > nul
от
chcp 1251>nul
Автор: Maza Faka
Дата сообщения: 12.06.2007 16:09
RRRomb

Цитата:
А можно ли сделать задержку на запуск файла
Например до полной загрузки всех процессов на компе и после чего запускать файл


Можно искать процессы в памяти, tasklist | find "program.exe", но это гиморно, если процессов много, а можно сделать задержку по времени, например при помощи этого кода получаем задержку 10 сек. ping -n 11 localhost>nul
Автор: RRRomb
Дата сообщения: 12.06.2007 16:18
Спасибо Maza Faka
Тобиш перед запуском пингуем 11 раз и выигрываем время
Пойду пробовать.
Проблема была такая при автозагрузке
"D:\Program Files\1Cv77\BIN\1Cv7.exe" config /Dd:\KhersonAvtotrans /NОлег /P12133 /@c:\1CBackup.ini
конфигуратор не запускался поскольку 1с ломанная и нужно подождать пока загрузятся
емулятор и прочая лабудень
Автор: Elroir
Дата сообщения: 12.06.2007 16:38
RRRomb

Цитата:
И чем отличается mode con codepage select=1251 > nul
от chcp 1251>nul

Ничем - делают одно и тоже.
Автор: othy
Дата сообщения: 12.06.2007 17:37
Подскажите как запустить переменную, допустим получившую такое значение:
%%J=arj32 x %%I -ht%out%\%data%\%%~nI -y
Что-то типа:
%%J >NUL
Если возможно..
Автор: Elroir
Дата сообщения: 12.06.2007 17:44
othy
Если это происходит внутри цикла for, в котором ты и получил %%I и %%J, то именно так.

Добавлено:
Немножко поторопился.
Надо сделать так:
1. В начало батника добавить "setlocal enabledelayedexpansion"
2. В цикле for -
set %%J=arj32 x %%I -ht%out%\%data%\%%~nI -y
!%%J! >NUL
Автор: twister2001
Дата сообщения: 13.06.2007 00:20
Здравствуйте! Помогите пожалуйста решить такую задачу:
Нужно сканировать определённый каталог, и если количество файлов в нём больше определённого количества, то удалить лишние (самые первые) из них.

Пока сделал вот что:

Количество файлов = 8, считаем файлы в каталоге:

set /a kol = 0
for %%f in (x:\folder\*.txt) do set /a kol+=1
if %kol% LSS 8 exit

а дальше, с удаление, застопорился. Пытался делать так:

for %%f in (x:\folder\*.txt) do if %kol% GTR 8 (del %%f & set /a kol-=1) else exit

но похоже, что конструкция if, в частности if %kol% расчитывается один раз, т.к. цикл отрабатывает для всех файлов в каталоге, и хотя после цикла %kol% равен 0, внутри цикла он всегда равен общему количеству файлов в каталоге

Пожалуйста, пините в нужном направлении
Автор: Elroir
Дата сообщения: 13.06.2007 00:28
twister2001
1. Из шапки - setlocal enabledelayedexpansion и переменные окружения
2. set /?
3. setlocal /?
Автор: KapralBel
Дата сообщения: 13.06.2007 00:30
twister2001

Код: @Echo Off
Set iCount=0
For %%a in (F:\!\*.*) do Call :_DelFile %%a
GoTo :EOF

:_DelFile
Set /a iCount+=1
Echo %iCount%=%1
If %iCount% GTR 8 Del %1 /q
GoTo :EOF
Автор: wolf0425
Дата сообщения: 13.06.2007 00:38
Elroir

Цитата:
В цикле for -
set %%J=arj32 x %%I -ht%out%\%data%\%%~nI -y
!%%J! >NUL
Э.... ты уверен, что пееменные вида %%j можно переопределять через set?
в цикле для переменных цикла !! не нужны... вроде.

Автор: Elroir
Дата сообщения: 13.06.2007 00:38
KapralBel
A что такое "(F:\!\*.*)" (я имею в виду восклицательный знак)?
Автор: wolf0425
Дата сообщения: 13.06.2007 00:40
Elroir наверное популярное имя каталога - "!" всегда первый...
Автор: KapralBel
Дата сообщения: 13.06.2007 00:42
Elroir
имя папки, а что по контексту догадаться нельзя?

Добавлено:
wolf0425
Опередил

Elroir
Очень удобно на нем отлаживать батнички - коротко, легко запоминаемо, и что на русс, что на англ - пишется одинаково
Автор: Elroir
Дата сообщения: 13.06.2007 00:45
wolf0425

Цитата:
Э.... ты уверен, что пееменные вида %%j можно переопределять через set?
в цикле для переменных цикла !! не нужны...

Я определяю переменную окружения, с именем, которое передается через второй токен в for-e, то есть %%J. И соответственно, чтобы прочитать эту переменную, мне нужны восклицательные знаки.
Пример:

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%I in ("testValue testVar") do (
set %%J=%%I
echo The value of "%%J" is "!%%J!"
)
Автор: euheny
Дата сообщения: 13.06.2007 02:43
Elroir
И вроде бы ищу в справке и всё равно не нахожу , а так всё просто .
Автор: vils007
Дата сообщения: 13.06.2007 07:13
Добрый день.

Цитата:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /b /a:d /s c:\w ^| find /i /v "c:\w\log"') do (
forfiles /p %%a /d -1 /c "cmd /c rd /q @file">nul 2>&1
forfiles /p %%a /d -1 /c "cmd /c del /q /f @file">nul 2>&1)

что делает батник

Цитата:
в папке С:\w\log ни чего не удаляем никогда. А в С:\w удаляем всё что старше одного дня.


Проблема: на одной машине работает, а на некоторых не работает. Понять почему сам не смог.
Автор: Maza Faka
Дата сообщения: 13.06.2007 07:35
KapralBel
twister2001

Цитата:
Нужно сканировать определённый каталог, и если количество файлов в нём больше определённого количества, то удалить лишние

Можно одной строкой:

Код:
@Echo off
for /f "skip=8 tokens=*" %%a in ('dir /b /s /a:-d c:\temp') do del "%%a" /q /f
Автор: JohnRD
Дата сообщения: 13.06.2007 10:04
Elroir

спасибо
подскажите что можно сделать если прога не успевает создать файл
а for уже проверяет папку, можно ли задержать как-то ? вместо паузы
@echo off
setlocal
for /f "tokens=*" %%a in ('dir /b /a-d /od /tc e:\video\ 2^>nul') do set "old_last=%%a"
start CamRecorder.exe /r
start /wait d:\RemoteControl.exe
start /wait CamRecorder.exe /s/x
pause
for /f "tokens=*" %%a in ('dir /b /a-d /od /tc e:\video\ 2^>nul') do set "new_last=%%a"
if "%old_last%"=="%new_last%" (
set "new_last="
echo New file not found
) else (echo %new_last%)

Автор: Elroir
Дата сообщения: 13.06.2007 10:12
JohnRD
Либо воспользоваться командой ping:

Код: ping -n количество_секунд -w 1000 127.0.0.1>nul
Автор: twister2001
Дата сообщения: 13.06.2007 11:26
Спасибо всем откликнувшимся! Буду пробовать
Автор: Maza Faka
Дата сообщения: 13.06.2007 13:25
JohnRD

Цитата:
если прога не успевает создать файл
а for уже проверяет папку, можно ли задержать как-то ?

Ты имеешь в виду, если программа ещё не закончила создание файла? Можно так:

Код:
@echo off
:begin
ping -n 11 localhost>nul
for /f "tokens=*" %%a in ('dir /b /s /a:-d /od /tc d:\movie\ 2^>nul') do ren %%a %%~nxa && set new=%%a || goto begin
..........
...your code...
Автор: LightSoft
Дата сообщения: 13.06.2007 15:58
Добрый день!
Почитал вашу переписку -- нашёл много интересного и нового для себя!
Может невнимательно смотрел, но не нашёл нужного для меня момента... я пока ещё начинающий, так сказать нюб, если можно помогите , заранее благодарен!
Суть :
ver |find "4." && for /f "tokens=1,2" %%u in ('date /t') do set d=%%v
ver |find "5.0" && for /f "tokens=1,2" %%u in ('date /t') do set d=%%v
ver |find "5.1" && for /f %%u in ('date /t') do set d=%%u

set YYYYMMDD=%d:~6,4%%d:~3,2%%d:~0,2%
set DDMMYY=%d:~0,2%%d:~3,2%%d:~8,2%
set YYMMDD=%d:~8,2%%d:~3,2%%d:~0,2%

Этот фрагмент текста честно содрал у предидущего сотрудника, на сколько я понял благодаря этому можно ссылаться либо создавать каталоги и файлы в виде текущей даты( но собственно самого текста я не понимаю -- если несложно проведите плз ликбез). Под ХР-pro и 2000-serv работало нормально, но после переноса на платформу 2003-serv батник перестал понимать даты и естественно не находит то, что нужно!
Помогите пожалуста!
Автор: KapralBel
Дата сообщения: 13.06.2007 16:25
LightSoft
Введи Date /t и что она дает
У меня есть подозрение, что
пн, 01/05/2006
а на ХР
01/05/2006
Правится в региональных настройках и языках - формат времени
Автор: wolf0425
Дата сообщения: 13.06.2007 17:02

Цитата:
а на ХР 01/05/2006

в региональных настройках оно действительно правится, но проще без проверки версий ОС писать, типа
set d=%date:~-10%
set YYYYMMDD=%d:~6,4%%d:~3,2%%d:~0,2%
set DDMMYY=%d:~0,2%%d:~3,2%%d:~8,2%
set YYMMDD=%d:~8,2%%d:~3,2%%d:~0,2%
а вот русский порядок дата-месяц-год в настройках надо проконтролировать...
Автор: LightSoft
Дата сообщения: 13.06.2007 17:31
Что-то не получаеться :
пробовал date /t выдаёт и на ХР и на 2003 : 13.06.2007
Форматы времени на 2003 выставлял идентичными с ХР -- всё равно не работает!

Когда запускаю просто то выдаёт : D:\archive\~0 2%d:~3,2%d:~8,2\ADMIN
Когда делаю так, как сказал wolf0425, то : D:\archive\dae: \ADMIN\

Может я что-то не так понял ... :(
Автор: Elroir
Дата сообщения: 13.06.2007 17:39
LightSoft
У меня такое впечатление, что на Win2003 просто не выполняется ни одно из трех условий (три первые строчки), поэтому не определяется переменная d и соответственно ничего не работает.
Что выдает команда "ver" на Win2003?
Автор: wolf0425
Дата сообщения: 13.06.2007 17:47
LightSoft

Цитата:
Когда делаю так, как сказал wolf0425, то

у меня там тильда куда-то потерялась, %date:~-10%
Автор: LightSoft
Дата сообщения: 13.06.2007 17:50
Elroir

2003 :
Microsoft Windows [Версия 5.2.3790]
ХР :
Microsoft Windows XP [Версия 5.1.2600]

Ты прав...судя по всему именно это -- а как прописать правильно -- я просто не понимаю сути кода по проверки версии ... молод ещё :)

wolf0425
ООООО
Вот теперь заработало супер! Огромное спасибо -- и всё же может мне кто-то доступно объяснить суть приведённого мною кода -- хочеться разобраться по полной, так сказать ! Буду благодарен!
Автор: Maza Faka
Дата сообщения: 13.06.2007 18:02
LightSoft

Цитата:
может мне кто-то доступно объяснить суть приведённого мною кода

SET /?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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