PDA

Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 27 28 29 30 31

gora
29-11-2008, 22:03
Нужно написать код для проверки большого количества файлов в разных директориях, и в случае отсутствия хотя-бы одного, вывести окошко с текстом об отсутствии файлов. Главное, чтобы эту команду не перечислять после указания каждого файла, она одинакова для всех отсутствующих файлов, должно быть красиво. »Попробуйте так:@Echo off
For %%I In (
"Директория\файл.exe"
"Директория\файл2.exe"
"Директория\файл3.exe"
"Директория\файл4.exe"
"Директория\файл5.exe"
"Директория 1\файл.exe"
"Директория 1\файл2.exe"
"Директория 1\файл3.exe"
"Директория 1\файл4.exe"
"Директория 1\файл5.exe"
) Do If Not Exist "%%~I" msg * /w /TIME:2 File '%%I' is absent.
exit
If Not Exist %Директория%\файл.exe »Не делайте переменных содержащих кирилицу.

Если у Вас в каждой директории ищутся одни и те же файлы, то можно сделать еще короче применив вложенный цикл.

amel27
01-12-2008, 06:56
NBA
нужно в указаное время - с 9AM до 12 AM а то он будет бесконечно так лобудеть »
тогда без планировщика не обойтись

Rostlv
1. Нужно написать код для проверки большого количества файлов в разных директориях »
вроде уже спрашивал, чем не устраивает п.2 (http://forum.oszone.net/post-962949-480.html) ?
2. Как с помощью CMD создать реально работающий прогрессбар? »
Progress Meter by Roy Holt (http://www.robvanderwoude.com/3rdpartybatchfiles.html#ProgressMeter), пример использования:
@ECHO OFF

CALL :ProgressMeter 0
For %%i In (10 20 30 40 50 60 70 80 90 100) Do (
Ping -n 2 127.0.0.1 >Nul
CALL :ProgressMeter %%i
)

Rostlv
02-12-2008, 17:38
Ещё 2 вопроса:
1. Какой ключ применить для старта и отображения текстового документа (.txt, .rtf, .doc) в режиме "поверх всех окон"?
2. Можно ли с помощью CMD проверить свободное место на системном и (или) загрузочном дисках, и в случае нехватки последнего выйти из CMD-файла?
Спасибо.

Creat0R
03-12-2008, 01:33
amel27,
Progress Meter by Roy Holt (http://www.robvanderwoude.com/3rdpartybatchfiles.html#ProgressMeter), пример использования:»
Никогда бы не подумал что в батнике можно это сделать :).
@ECHO OFF

CALL :ProgressMeter 0

For %%i In (10 20 30 40 50 60 70 80 90 100) Do (
Ping -n 2 LocalHost > Nul
CALL :ProgressMeter %%i
)

Ping -n 3 LocalHost > Nul

:: ******************************************************************
:ProgressMeter
:: 2007_01_10 by rholt
:: core2quad@rogers.com
:: This subroutine displays a progress meter in the titlebar of
:: the current CMD shell window.
::
:: Input: %1 must contain the current progress (0-100)
:: Return: None
:: ******************************************************************
:: Calculate the number of vertical bars then spaces based on the percentage value passed
SETLOCAL ENABLEDELAYEDEXPANSION

SET ProgressChar=I
SET ProgressPercent=%1
SET /A NumBars=%ProgressPercent%/2
SET /A NumSpaces=50-%NumBars%

:: Clear the progress meter image
SET Meter=
CLS

COLOR 0A

:: Build the meter image using vertical bars followed by trailing spaces
:: Note there is a trailing space at the end of the second line below
FOR /L %%A IN (%NumBars%,-1,1) DO SET Meter=!Meter!%ProgressChar%
FOR /L %%A IN (%NumSpaces%,-1,1) DO SET Meter=!Meter!

:: Display the progress meter in the title bar and return to the main program
TITLE Progress: [%Meter%] %ProgressPercent%%%...
ECHO Progress: [%Meter%] %ProgressPercent%%%...

ENDLOCAL

GOTO :EOF

Rostlv, Какой ключ применить для старта и отображения текстового документа (.txt, .rtf, .doc) в режиме "поверх всех окон"?
Можно так:

Start "SomFile.txt" && Start Cmdow (http://www.commandline.co.uk/cmdow/) "Title" /Top

amel27
03-12-2008, 07:57
Creat0R, Пример с отображением в самой консоли
в твоем примере зачищается хистори... давно хотел такое же, но без затирания, вроде нашел:
@Echo Off
Setlocal EnableDelayedExpansion

Echo. Процесс запущен
For /L %%i In (1,1,100) Do (
Call :SHOW %%i Тестирование...
Ping -n 1 127.0.0.1 >Nul
)
Echo.
Echo.
Echo. Процесс завершен
Echo.
Pause

Exit

:SHOW
Set $COLS=70

If Not Defined $P (
Set /A $P=0
Set $X=[
For /L %%a In (1,1,%$COLS%) Do Set $X=!$X!.
Set $X=!$X!]
For /L %%a In (1,1,%$COLS%) Do Set $X=!$X!
Set $X=!$X!
Echo.
<Nul Set /P $X=!$X!
)
Set $X=
Set /A $D = (%$COLS%*%1)/100 - (%$COLS%*%$P%)/100
If %$D% GTR 0 For /L %%a In (1,1,%$D%) Do Set $X=!$X!#
If %1 EQU 100 Set $X=!$X!]
<Nul Set /P $X=!$X!
Title %2%1%% Done
Set $P=%1

GoTo :EOF

Creat0R
04-12-2008, 00:26
amel27, давно хотел такое же, но без затирания, вроде нашел »
Привосходно! я пробовал, но очень быстро опустил руки, видимо думал что нереально :).

D_Master
04-12-2008, 23:09
Подскажите плиз, как можно реализовать небольшой мониторинг времени:
к примеру, есть определенный промежуток времени - с 23:00 до 09:00. Надо сделать так, чтобы в батник проверял время, и, если текущее время соответствует заданному промежутку, то выполняет какие-либо действия.
Всё, на что хватило моих познаний, это на мониторинг определенного времени (не промежутка):
@echo off
:monitor
set stoptime=23:00
for /F %%t in ('time/T') do set T=%%t
if %T%==%stoptime% (
call :stop
) else (
call :monitor

:stop
start stop.exe
exit

Creat0R
05-12-2008, 00:51
D_Master, Надо сделать так, чтобы в батник проверял время, и, если текущее время соответствует заданному промежутку, то выполняет какие-либо действия. »
Примерно так:

@Echo Off

Set StopTime1=23:00
Set StopTime2=09:00

:Monitor
For /F %%i In ('Time/T') Do Set CurrentTime=%%i

If %CurrentTime% GTR %StopTime2% If %CurrentTime% GEQ %StopTime1% Call :Stop
If %CurrentTime% LSS %StopTime1% If %CurrentTime% LEQ %StopTime2% Call :Stop

Ping -n 2 LocalHost > Nul
GoTo :Monitor

:Stop
Start Stop.exe
Exit

D_Master
05-12-2008, 02:34
Creat0R, спасибо, всё работает! :up

censored
08-12-2008, 16:41
echo Off
cls
echo Нажмите:
echo "1" , если nForce2
echo "2" , если nForce4
echo "3" , если другое.
Set /P Ch=Сделайте Ваш выбор:
If "%Ch%"=="1"
Echo Устанавливаем драйвера для NForce2 ....
start \Program files\ASV\nforce2\setup.exe
goto :1
If "%Ch%"=="2"
Echo Устанавливаем драйвера для nForce4.....
start \Program Files\ASV\nForce4\setup.exe
goto :1
If "%Ch%"=="3"
goto :1

Подскажите где ошибка.

Petya V4sechkin
08-12-2008, 16:46
censored, goto :1 замечательно, а где сама метка? куда переход?

echo Off
cls
echo Нажмите:
echo "1" , если nForce2
echo "2" , если nForce4
echo "3" , если другое.
Set /P Ch=Сделайте Ваш выбор:
If "%Ch%"=="1" (
Echo Устанавливаем драйвера для NForce2 ....
start \Program files\ASV\nforce2\setup.exe
)
If "%Ch%"=="2" (
Echo Устанавливаем драйвера для nForce4.....
start \Program Files\ASV\nForce4\setup.exe
)

censored
08-12-2008, 16:52
правельно переход ":1" дальше, я просто его не включал в список, он не работал при нажатии 1 и 2, не имеет значения

censored
08-12-2008, 17:52
Подскажи пожалуйста.
netsh interface ip set address name = "Подключение по локальной сети" source = static addr = 172.20.4.%IP_Addr% mask = 255.255.255.0 gateway = 172.20.4.254 gwmetric = 1

Бывает при установке драйвера "Подключение по локальной сети №", можно ли задать для всех ?

если ответа не нашлось, наверное нельзя :(

sLiDeR-X
09-12-2008, 20:15
у меня практически из той же оперы вопрос...
как сделать так, чтоб когда нет определенного компа в сети (выключился), выключить мой? при этом, чтоб не нагружать проц, сделать проверку раз в n минут

Petya V4sechkin
09-12-2008, 20:58
sLiDeR-X, можно включить в планировщик заданий (раз в n минут) примерно такой батник:
Ping -n 1 имя_или_IP-адрес
If "%ErrorLevel%" NEQ "0" Shutdown -s -t 60 -f

Вместо имя_или_IP-адрес подставить нужное.
Пинг должен быть разрешен.

sLiDeR-X
10-12-2008, 05:40
а если не через планировщик, у меня он зависает :(

flighttothemoon
13-12-2008, 02:35
Присоединяюсь к теме. Кто может, помогите написать простой (не для меня, как видите) сценарий. Скрипт на командной строке, пробуждающий удаленный компьютер в локальной сети c помощью программы poweroff (http://users.telenet.be/jbosman/applications.html). Добавляю его в автозагрузку ноутбука, но скрипт запускается прежде, чем компьютер найдет беспроводную домашнюю сеть (иногда приходится ждать даже минуту). Вот думаю - как сначала проверить, подключился ли компьютер к командной строке - и потом только запускать программку poweroff? Можно ли это проверить командами командной строки? Спасибо заранее за помощь.

amel27
15-12-2008, 12:13
а если не через планировщик »примерно так, понятно что расчет паузы грубый
Set $MIN=3
Set $MLT=60

Set $NAME=MyComp

Set /A $MIN=%$MIN%*%$MLT%
:LOOP
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$NAME%
If ErrorLevel 1 GoTo LOOP

Shutdown -s -t 60 -f


как сначала проверить, подключился ли компьютер к командной строке - и потом только запускать программку poweroff? »тем же пингом пойдет?
Set $IP=192.168.0.10
Set NET=255.255.255.0
Set MAC=1234567890ab

:LOOP
Ping -n 5 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 GoTo LOOP

PowerOff wol -ip %$IP% -subnet %NET% -mac %MAC%

censored
15-12-2008, 12:16
Спасибо сам разобрался.
Выход netsh interface ip set address name = "Подключение" source = static addr = %IP_Addr% mask = 255.255.255.0 gateway = IP gwmetric = 1

sLiDeR-X
15-12-2008, 13:56
amel27, а почему бы не сделать проще, например вот так:
@Echo Off

Set $MIN=60

Set $IP=192.168.10.45

:LOOP
Ping -n %$MIN% 127.0.0.1 >Nul
Ping -n 1 %$IP%
If ErrorLevel 1 Shutdown -s -t 60 -f
GoTo LOOP

для чего делается вот это?
Set $MIN=3
Set $MLT=60

Set /A $MIN=%$MIN%*%$MLT%




© OSzone.net 2001-2012