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

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

Автор: KapralBel
Дата сообщения: 19.06.2007 00:01
ViSiToR
Какая сеть? Какое соединение?
Автор: Young_Admin
Дата сообщения: 19.06.2007 10:09
Нужен такой батник:

1. Вывод сообщения (echo)
2. n секунд ожидание нажатия any key
3. При нажатии - выход, если в течении nсекунд нажатия не произошло - выполнить следующую команду

Кто сможет помочь?
Автор: newhome
Дата сообщения: 19.06.2007 10:20
to Maza Faka

Цитата:
Работает с кодировками "ANSI", "DOS", "KOI8R", "UNICODE"

А как решить проблему с некорректным отображением символов? Возможно ли, например, вывод "названия файла, клавиша для его обработки" - в формате:
-------------
Для обработки файла 1.кв нажмите клавишу 1.
Для обработки файла 2.кв нажмите клавишу 2.
Для обработки файла 3.кв нажмите клавишу 3.
...
и.т.д.
-------------
Я понимаю эту задачу можно решить, присваивая каждому файлу имя %f_number%%filename%. А потом читать из файла или вывода команды: for %%i in (`команда`) do (set file)
if %file%==1 (set press_key=1) & (set fname=%filename%)
....
ну что то в этом духе. Просто не знаю как это сделать. Может подкините идею?
Автор: Maza Faka
Дата сообщения: 19.06.2007 10:45
Young_Admin
Скачай утилиту choice.exe, скопируй в папку Windows и запускай батник:

Код:
@echo off
choice /n /t:y,5 Press [N] to exit [Y] to continue
if %errorlevel%==2 goto :eof
echo now begin
....your code..
...............
Автор: Young_Admin
Дата сообщения: 19.06.2007 11:46
Maza Faka


Цитата:
Скачай утилиту choice.exe, скопируй в папку Windows и запускай батник:


Код:
Код:
@echo off
choice /n /t:y,5 Press [N] to exit [Y] to continue
if %errorlevel%==2 goto :eof
echo now begin
....your code..
...............



интервал времени 5 секунд, выделенно жирным
Автор: igor_andreev
Дата сообщения: 19.06.2007 12:10
ViSiToR

Цитата:
Переключатель наверно смогу сделать сам, если узнаю как включать/отключать сеть, а также как получить текущее состояние (вкл. или выкл.).

cnic.exe в шапке, в полезных утилитах. Немного сволочная программка оказалась, nnCron у меня ее скрытно запускал, и я все не мог понять, чего она на моих компах и дома и на работе работает, а на бухгалтерско-секретарских нет. Винда оказалось у меня английская повезде . Дабы на русской XP cnic работала - надо переименовать "Беспроводное сетевое соединение", "Подключение по локальной сети" в название английскими буквами, вроде "Wireless Network Connection", "Local Area Connection" и т.п.

newhome

Цитата:
Я понимаю эту задачу можно решить, присваивая каждому файлу имя %f_number%%filename%. А потом читать из файла или вывода команды: for %%i in (`команда`) do (set file)
if %file%==1 (set press_key=1) & (set fname=%filename%)
....
ну что то в этом духе. Просто не знаю как это сделать. Может подкините идею?

Подкидываю. Делал что-то когда-то себе, ищет в текущей папке файлы *.txt и выводит в меню. Поскольку делал себе, то соответственно работает с английскими названиями без пробелов и спецсимволов, у мну других нет. Но с присваиванием каждому файлу в папке номера все понятно надеюсь, остальное переделай под свои нужды.

Код:
@ECHO OFF & SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

:: Начинаем писать меню

:MENU
ECHO.Select your choice:
ECHO.*******************

:: устанавливаем счетчик файлов *.txt на ноль

SET /A "FILES_COUNT=0"

:: Каждый файл *.txt в папке заносим
:: в переменную FILE[FILES_COUNT], выводим его в меню на экран
:: и увеличиваем общий счетчик FILES_COUNT на единицу

FOR %%A IN (*.TXT) DO (
SET /A "FILES_COUNT+=1"
SET "FILE!FILES_COUNT!=%%A"
ECHO.!FILES_COUNT!. %%A
)

:: Пишем окончание меню

ECHO.Q. - Quit
ECHO.*******************

:: Аброботка ашыпки
:: если FILES_COUNT равен нулю, значит нет *.txt файлов в текущей папке

IF %FILES_COUNT% EQU 0 (
CLS
ECHO.Files not found
ECHO.Press any key to exit...
PAUSE>NUL
EXIT
)

:: Если счетчик FILES_COUNT больше нуля, стало быть какой-то файл
:: *.txt есть и его можно использовать.
:: Посему просим ввести цифру или букву Q

SET /P ASK_YOU=Write here your choice above and press [Enter]:

:: Если ввели букву Q или q то выходим из батника

IF /I %ASK_YOU% EQU Q (
CLS
ECHO.Bye...
ECHO.Press any key to exit...
PAUSE>NUL
EXIT
)

:: Если ввели какую-то цифирьку ? и такой FILE?
:: существует, то вызываем метку :MY_LABEL [цифра], если такого файла
:: нет - возвращаемся в меню

IF EXIST "!FILE%ASK_YOU%!" (
CLS
CALL :MY_LABEL "!FILE%ASK_YOU%!"
) ELSE (
CLS
FOR /L %%Z IN (1,1,!FILES_COUNT!) DO SET "FILE%%Z="
GOTO :MENU
)

:: Если не цифра от <1> до <счетчик файлов> и не буква Q - значит
:: %USERNAME% туповат или клавишей промахнулся, возвращаемся в меню.
:: Соответственно там, в начале меню FILES_COUNT опять сбрасывается
:: на ноль и переменные FILE[num] опять переопределятся

CLS & GOTO :MENU

:: Это сама метка, которую мы вызвали, передав ей какую-то цифру

:MY_LABEL
NOTEPAD "%~1"
EXIT

Автор: Maza Faka
Дата сообщения: 19.06.2007 13:46
Young_Admin

Цитата:
А по прошествии 5 секунд choice вернёт значение Y ?

Да
Автор: ViSiToR
Дата сообщения: 20.06.2007 01:32
KapralBel

Цитата:
Какая сеть? Какое соединение?

Кабельное (Подключение по локальной сети ), адаптер L8139/810x Family Fast Ethernet NIC, соеденение быстрое - а где посмотреть чтобы точно?

igor_andreev
Мне желательно встроенными средствами
Автор: uadeep
Дата сообщения: 20.06.2007 08:58
Добрый день.
есть переменная %string%=\\computer\share\x1\..\xn\ [UNC имя или локальный путь], надо выделить xn

никак не могу сообразить , топики полистал, вроде не встречалось ..
Автор: ViSiToR
Дата сообщения: 20.06.2007 09:05
uadeep

Цитата:
надо выделить xn

Что значит выделить? удалить из переменной?
Автор: KapralBel
Дата сообщения: 20.06.2007 09:25
ViSiToR

Цитата:
Кабельное

Странно у меня тоже такое - но RASDial работает
Обычно в этом случае срабатывает
RASDial Имя Пользователь Пароль
Сегодня вечером проверю стукни в около 21 по Москве в 4450500

Автор: wolf0425
Дата сообщения: 20.06.2007 09:29

Цитата:
%string%=\\computer\share\x1\..\xn\ [UNC имя или локальный путь], надо выделить xn


set "string=\\computer\share\x1\..\xn\"
for %%a in ("%string:~0,-1%") do echo %%~nxa

вот только если такие компьютер+шара недоступны - это будет медленно. но тоже сработает.
Автор: uadeep
Дата сообщения: 20.06.2007 09:34

Цитата:
Что значит выделить? удалить из переменной?


надо получить %string2%=xn (имя последней папки в пути)

UPD


Цитата:
set string=\\computer\share\x1\..\xn\
for %%a in ("%string:~0,-1%") do echo %%~nxa

вот только если такие компьютер+шара недоступны - это будет медленно. но тоже сработает.


доступность машины/шары проверяется раньше, ..а здесь же работа с текстом, огромное спасибо , то что надо
Автор: Maza Faka
Дата сообщения: 20.06.2007 10:58
uadeep
wolf0425
Ещё один вариант:

Код:
@echo off
set string=\\computer\share\x1\..\xn\
set string=%string:\= %
for %%a in (%string%) do set string2=%%a
echo %string2%
Автор: newhome
Дата сообщения: 20.06.2007 11:05
igor_andreev

УРА!
Огромное спасибо! Всё работает без правки и с длинными именами и с кириллицей!!!

Автор: Maza Faka
Дата сообщения: 20.06.2007 11:10
uadeep
И ещё вариант

Код:
@echo off
set "string=\\computer\share\x1\..\xn\"
:loop
for /f "tokens=1* delims=\" %%a in ("%string%") do (
set string=%%b
set string2=%%a
if defined string goto loop)
echo %string2%
Автор: uadeep
Дата сообщения: 20.06.2007 11:37

Цитата:
Работает чуть быстрее


Цитата:
И ещё вариант


uadeep уполз в нору курить Maza Fakaины скрипты
Автор: Maza Faka
Дата сообщения: 20.06.2007 12:15
GORA2

Цитата:
Лучше чтобы все было как у исходного файла (и дата создания, и дата модификации), если это возможно

Возможно , по дате создания файла:

Код:
@echo off
set cur_date=%date%
setlocal enabledelayedexpansion
for /f %%a in ('dir /t:c c:\old\*.png ^| findstr [0-9] ^| find "."') do (
set old_date=%%a
date !old_date!
for %%b in ("d:\new\%%~nxa") do (
pushd %%~dpb
copy "%%~nxb"+,,
)
)
date %cur_date%
Автор: Elroir
Дата сообщения: 20.06.2007 12:25
Maza Faka
Можно я тебя немножко покритикую?

Цитата:
Ещё один вариант:
Код:
@echo off
set string=\\computer\share\x1\..\xn\
set string=%string:\= %
for %%a in (%string%) do set string2=%%a
echo %string2%

Все хорошо до той поры, пока в названии последней директории нет пробелов.


Цитата:
Возможно , по дате создания файла: ...

Опять же - ты устанавливаешь только дату модификации, причем она становится такой, как дата создания проверяемого файла.
Автор: GORA2
Дата сообщения: 20.06.2007 12:26
Maza Faka
Как приятно, что обо мне (и моей задаче) еще помнят здесь . Правда я уже решил ее без батника (картинки были частью справки, я ее скомпилировал, сменил дату на нужную "старую" и снова декомпилировал. Получил картинки со старыми датами ), но ваш вариант конечно поробую тоже. Спасибо
Автор: Maza Faka
Дата сообщения: 20.06.2007 13:40
Elroir

Цитата:
Опять же - ты устанавливаешь только дату модификации, причем она становится такой, как дата создания проверяемого файла.

Так ведь нам и нужна дата создания, что не так?

Цитата:
Все хорошо до той поры, пока в названии последней директории нет пробелов.

Поэтому я выложил 2 варианта решения

GORA2

Цитата:
вариант конечно попробую тоже

Немного исправленный вариант:

Код:
@echo off
set cur_date=%date%
setlocal enabledelayedexpansion
for /f %%a in ('dir /t:c c:\old\*.png ^| find ".png"') do (
set old_date=%%a
date !old_date!
for %%b in ("d:\new\%%~nxa") do (
pushd %%~dpb
copy "%%~nxb"+,,
)
)
date %cur_date%
Автор: mcTNT2
Дата сообщения: 20.06.2007 14:50
Всем доброго времени суток.

Прошу извинить, если повторяюсь, но беглый просмотр не внес ясности.
Как можно подставить в переменную имя последнего созданного файла в дирректории, т.е. того, который первый в списке при запуске команды

dir /b /o-d
Автор: Elroir
Дата сообщения: 20.06.2007 16:01
mcTNT2

Код:
@echo off
for /f "tokens=*" %%a in ('dir /b /a-d /od') do set "last=%%a"
echo %last%
Автор: Maza Faka
Дата сообщения: 20.06.2007 16:15
mcTNT2
А если файлов очень много, то так будет чуть быстрее:

Код:
@echo off
for /f "tokens=*" %%a in ('dir /b /a-d /o:-d') do set "last=%%a" & goto file
:file
echo %last%
Автор: mcTNT2
Дата сообщения: 20.06.2007 17:13
Elroir, Maza Faka

Спасибо.
Автор: wolf0425
Дата сообщения: 20.06.2007 17:46
Есть какие-нибудь идеи - как батником переключить раскладку клавиатуры в текущей консоли?
И, заодно, определить - какая сейчас раскладка? (английская/другая )

Переключалка - родная ХРшная.
Автор: Elroir
Дата сообщения: 20.06.2007 17:55
Maza Faka

Цитата:
Так ведь нам и нужна дата создания, что не так?

Насколько я понял задачу, там нужно взять дату создания и дату модификации файла из директории old, и установить их такому же файлу из директории new. У тебя в коде берется дата создания файла из old и устанавливается в качестве даты модификации файла из new.
Честно говоря я не знаю, как поменять дату создания файла без сторонних утилит.
А из сторонних подходит dirdate - если бы она была еще и freeware...
Автор: igor_andreev
Дата сообщения: 20.06.2007 18:28

Цитата:
Честно говоря я не знаю, как поменять дату создания файла без сторонних утилит.
А из сторонних подходит dirdate - если бы она была еще и freeware...

Да их и фриварных много
setfile http://peter.verhas.com/progs/c/nt/setfile/
touch http://www.stevemiller.net/apps/
майкрософтовский touch ftp://ftp.microsoft.com/Services/TechNet/samples/PS/Win98/Reskit/FILE/
Кажется в unixutils был touch.exe, у автора regshot был sft.exe(куда-то делась домашняя страница) и т.д.


Добавлено:
А, еще nircmdc.exe умеет, в шапке сидит ...
Автор: Maza Faka
Дата сообщения: 20.06.2007 18:56
Elroir

Цитата:
в коде берется дата создания файла из old и устанавливается в качестве даты модификации файла из new

При просмотре конечного "модифицированного" файла при помощи команды "Dir" с ключами /t:a /t:c /t:w, везде выдаётся одинаковая дата, получается, что файл "создаётся".
Автор: Elroir
Дата сообщения: 20.06.2007 21:56
Maza Faka

Цитата:
При просмотре конечного "модифицированного" файла при помощи команды "Dir" с ключами /t:a /t:c /t:w, везде выдаётся одинаковая дата, получается, что файл "создаётся".

Очень странно - у меня при этом меняется только значение modified.

igor_andreev
Мне надо уже привыкнуть, что за утилитами надо обращаться к тебе

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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