Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3

Модерирует : KLASS, IFkO

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах
(часть 1, часть 2)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    slayer120



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемый ОЛЛ! Подскажите средство работы с security свойствами папок.
     
      Задача - составить таблицу доступа (папка, группы юзеров, юзеры)  
    для файлового сервака (куча папок-шар и подпапок, внутри шар подпапки со своим секурите) .  
     С шарами вроде ясно - rmtshare (либо cacls) а вот как быть с секурите?
     
      PS. Сорри если ошибся темой.

    Всего записей: 303 | Зарегистр. 24-01-2007 | Отправлено: 09:17 18-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, всем!
    Задача: Есть две папки old и new с файлами. Расширения файлов одно .png, имена файлов в этих папках тоже одинаковые. Т.е. файл bootscreen.png есть и в первой и во второй папке и так все остальные файлы. Различаются одноименные файлы в папках только размером и датой создания. Даты у файлов в папке old могут быть разные. Можно ли файлам в папке new присвоить даты одноименных файлов из папки old?
    Заранее спасибо.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 09:40 18-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2
    Попробуй так:

    Код:
     
    @echo off
    set cur_date=%date%
    setlocal enabledelayedexpansion
    for %%a in (d:\old\*.png) do (
    set old_date=%%~ta
    set old_date=!old_date:~0,10!
    date !old_date!
    for %%b in ("d:\new\%%~nxa") do (
    pushd %%~dpb
    copy "%%~nxb"+,,
    )
    )
    set date %cur_date%
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:54 18-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Спасибо, Вы как всегда на высоте!!!.
    Правда в последней строчке я выбросил set и оставил только date %cur_date%. А все остальное вроде сработало.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:17 18-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    GORA2
    В этом коде, меняется и проверяется дата модификации файла, а не создания. Или это не играет принципиальной роли?

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:27 18-06-2007 | Исправлено: Elroir, 13:55 18-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2

    Цитата:
    Правда в последней строчке я выбросил set и оставил только date %cur_date%

    Да, правильно, "set" там не нужен, поторопился...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 13:45 18-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Цитата:
    В этом коде, меняется и проверяется дата модификации файла, а не создания. Или это не играет принципиальной роли?
    Да... Вопрос конечно интересный! Лучше чтобы все было как у исходного файла (и дата создания, и дата модификации), если это возможно. Тогда точно сторонний скрипт должен сработать (я его не имею, чтобы проверить какую дату там анализируют и как ). А можно батником править обе даты?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 14:40 18-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2

    Цитата:
    А можно батником править обе даты?

    Стандартными средствами нет.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:30 18-06-2007
    newhome

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to Maza Faka
    Огромное спасибо за помощь. Решил не гемороиться c просчетом суммы и использовал С. Теперь нужно сделать чтобы пользователь выбирал файл, как я написал во второй раз. Проблема кодировок не решается способом 'more ^< c:\test\%choose%', также есть проблема длинных имен (например файл: "abcd sd 123 gg.cmd").
     

    Всего записей: 11 | Зарегистр. 14-06-2007 | Отправлено: 18:39 18-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    newhome

    Код:
     
    @echo off
    :begin
    set /p "choose=Please select file [name.ext] "
    if not defined choose goto begin
    if /i not exist "c:\test\%choose%" (echo Error, file not exist & goto begin) else (
       for /f "delims=" %%a in ('more "c:\test\%choose%"') do echo %%a)
     

    Работает с кодировками "ANSI", "DOS", "KOI8R", "UNICODE" и с длинными именами файлов с пробелами.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:41 18-06-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет всем, давно я тут не был ....
     
    Есть задача:
     
    Нужен батник для включения/отключения сети (через rasdial не получается ), т.е чтобы при одном нажатии включалось соеденение, при повторном отключалось..
     
    Переключатель наверно смогу сделать сам, если узнаю как включать/отключать сеть, а также как получить текущее состояние (вкл. или выкл.).
     
    Желательно встроенными средставми Win Xp/Vista.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:52 19-06-2007 | Исправлено: ViSiToR, 00:52 19-06-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR
    Какая сеть? Какое соединение?

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 01:01 19-06-2007
    Young_Admin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужен такой батник:
     
    1. Вывод сообщения (echo)
    2. n секунд ожидание нажатия any key
    3. При нажатии - выход, если в течении nсекунд нажатия не произошло - выполнить следующую команду
     
    Кто сможет помочь?

    Всего записей: 157 | Зарегистр. 25-06-2006 | Отправлено: 11:09 19-06-2007
    newhome

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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%)
    ....
    ну что то в этом духе. Просто не знаю как это сделать. Может подкините идею?

    Всего записей: 11 | Зарегистр. 14-06-2007 | Отправлено: 11:20 19-06-2007 | Исправлено: newhome, 11:21 19-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    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..
    ...............
     

    интервал времени 5 секунд, выделенно жирным
     
    Добавлено:
    newhome
    Сохрани код в DOS кодировке:

    Код:
     
    @echo off
    color 0b
    echo    +------------------------------------------------------+
    echo    :Для обработки файла 1.кв нажмите клавишу 1:
    echo    :Для обработки файла 2.кв нажмите клавишу 2:
    echo    :Для обработки файла 3.кв нажмите клавишу 3:
    echo    :Для обработки файла 4.кв нажмите клавишу 4:
    echo    :Для обработки файла 5.кв нажмите клавишу 5:
    echo    +------------------------------------------------------+
    echo.
    set /p "choose= "
    cls
    for /f "tokens=*" %%a in ('dir /b /s c:\test\%choose%.кв') do set file=%%a
    echo %file%
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:45 19-06-2007 | Исправлено: Maza Faka, 12:11 19-06-2007
    Young_Admin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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 секунд, выделенно жирным

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

    Всего записей: 157 | Зарегистр. 25-06-2006 | Отправлено: 12:46 19-06-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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
     

     

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 13:10 19-06-2007 | Исправлено: igor_andreev, 13:17 19-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Young_Admin

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

    Да

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:46 19-06-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    KapralBel

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

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

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:32 20-06-2007
    uadeep

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.  
    есть переменная %string%=\\computer\share\x1\..\xn\ [UNC имя или локальный путь], надо выделить xn
     
    никак не могу сообразить , топики полистал, вроде не встречалось ..

    Всего записей: 6 | Зарегистр. 20-06-2007 | Отправлено: 09:58 20-06-2007
       

    Страницы: 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru