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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    ZenitFan



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите решить следующую задачу (по учёбе):
     
    Создать пакетный файл, выводящий на экран строки из букв латинского алфавита (предварительно заданных в качестве его  параметров) следующим образом:
     
       A B C D E F G H I
       B C D E F G H I J
       C D E F G H I J H
       D E F G H I J H I
              ...
       R S T U V W X Y Z
       S T U V W X Y Z
       T U V W X Y Z
       U V W X Y Z
       V W X Y Z
       W X Y Z
       X Y Z
       Y Z
       Z
     
    Заранее спасибо!

    ----------
    AMD Ryzen7 5800X3D, ASUS STRIX X570-E, 32GB DDR4-3600 G.Skill, RX 7900XTX, Sams980PRO 1TB NVMe + Seagate IronWolf 4TB + WD Red 4TB, SB AE-9, 27" DELL S2721DGFA, Win10Pro(22H2)Ru

    Всего записей: 813 | Зарегистр. 10-09-2006 | Отправлено: 15:16 08-04-2008
    igor_andreev

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

    Код:

    shift /?

     
    somename.cmd

    Код:

    @ECHO OFF
    :LOOP
    IF %1.==. GOTO :EOF
    ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
    SHIFT
    GOTO :LOOP


    Цитата:
    (предварительно заданных в качестве его  параметров)

    Это вот так, я правильно понял? Переданных батнику в комстроке в качестве параметров?

    Код:

    somename.cmd A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 16:08 08-04-2008 | Исправлено: igor_andreev, 16:14 08-04-2008
    01MDM



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set "list=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for /l %%i in (0,1,26) do if not "!list:~%%i!"=="" echo !list:~%%i!  
     

     
    Добавлено:

    Цитата:
    (предварительно заданных в качестве его  параметров) следующим образом:  

     
    Тогда shift
     
     
    Добавлено:
    Или

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set list=%1
    for /l %%i in (0,1,26) do if not "!list:~%%i!"=="" echo !list:~%%i!  
     

     
    Вызывать name.cmd ABCDEFGHIJKLMNOPQRSTUVWXYZ

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:17 08-04-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Студентам это для освоения shift и задали, видишь, в приведенном им примере по 9 букв? shift как раз столько и может обработать

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 16:33 08-04-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Да, к тому же мой вариант без пробелов между букв.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:38 08-04-2008
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может кто-нибудь подскажет, что надо скомандовать виндам чтоб отключить переключалку раскладок клавиатуры?
    ЖЕлательно бы не убивая из батника никаких процессов, но это не догма...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:13 08-04-2008
    SalaVilaVat



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Проблема такая есть батник , который рарит на серваке 2003 все файлы одноготипа в заданной папке и её подпапках, для регулировки нагрузки перед архивацией каждого файла проверяет количество запущенных WinRar.exe  командой TASKLIST, и больше 4 не запускает - ждёт N минут и проверяет снова,  
        НО команда тасклист в Win2003 видимо отличается от XP и фильтр IMAGENAME вызывает ошибку. в справке всё одинаково , где можно найти актуальное описание?
     
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    XP - VISTA
    C:\WINDOWS>tasklist /NH /FI "IMAGENAME eq winrar.exe"
     
    winrar.exe                    1956 Console                 0       416 КБ
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Win 2003
    C:\WINDOWS>tasklist /NH /FI "Imagename eq winrar.exe"
    Ошибка: Фильтр поиска не опознан.
     
    пока решил продлему копированием на сервер переименованного файла из XP  
    ---- tasklist_xp /NH /FI "Imagename eq winrar.exe"  
    но хотелось бы разобратся

    Всего записей: 78 | Зарегистр. 24-01-2003 | Отправлено: 22:45 08-04-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Сразу оговорюсь - сам не пробовал
    Но вот тут китайцы-тайцы в реестре в "HKEY_CURRENT_USER\Keyboard Layout" чет меняют
    http://baohaojun.yo2.cn/articles/disable-language-input-method-switch-hotkey-for-ntemacs.html
    http://www.tutorials-win.com/WindowsXP/Keyboard-layout-1578950/
    И на http://windowsitpro.com/article/articleid/24570/disabling-keyboard-layout-switches.html
    тоже начинают с этой ветки реестра(весь текст зарегистрированным юзерам доступен, поэтому я тоже не читал )
    Попробуй поменяй reg.exe Hotkey на 3 или 4. Раз HKCU - то может после reg.exe сделать rundll32.exe user32.dll,UpdatePerUserSystemParameters, авось применится без перезагрузки.

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 00:03 09-04-2008
    floodway

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет.
    Столкнулся я со следующим кодом:

    Код:
    for /L %%a in (1,1,3) do (
      set b0=1
      set b1=2
      for /L %%b in (%b0%,1,%b1%) do echo %%a %%b
    )
     

    Оказывается, что при первом запуске переменные b0 и b1 устанавливаются, но якобы после работы скрипта, т.е. при первом запуске вложенный цикл не отрабатывает. А при втором запуске переменные уже в среде, так что работает нормально.
     
    Кто сможет объяснить?
     
    зы. Если 'set' вынести за цикл, то работает с первого раза, но мне надо менять значения переменных в ходе выполнения итераций.

    Всего записей: 8 | Зарегистр. 10-05-2006 | Отправлено: 01:25 09-04-2008 | Исправлено: floodway, 01:27 09-04-2008
    Grim_Repo



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, подскажите - есть ли альтернативная команда для отключения/включения интернета? Так как rasdial на подключения по локальной сети и на Wi-Fi подключения - не действует...

    Всего записей: 397 | Зарегистр. 02-05-2006 | Отправлено: 02:07 09-04-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    floodway
    http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=633&limit=1
     
    Grim_Repo
    В шапке, в разделе "Пoлезные утилиты", посмотри утилиту cnic

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:22 09-04-2008
    NIKZZZZ



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

    Цитата:
    Может кто-нибудь подскажет, что надо скомандовать виндам чтоб отключить переключалку раскладок клавиатуры?  

    Раскладка клавиатуры лежит в реестре здесь:

    Код:
    Windows Registry Editor Version 5.00
     
    [HKEY_USERS\.DEFAULT\Keyboard Layout]
     
    [HKEY_USERS\.DEFAULT\Keyboard Layout\Preload]
    ;По умолчанию 1=409 - Eng
    "1"="00000409"
    ;Альтернативная - Rus
    "2"="00000419"
     
    [HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
    "Hotkey"="1"
    "Language Hotkey"="1"
    "Layout Hotkey"="2"
     

     
    Удалив "2"="00000419" или заменив  "2"="00000409" получим только Eng. Возможно можно также запретить горячие клавиши - не пробовал.
     
    Удалив из \windows\system32\kbdru.dll при переключении на русский клавиатура будет заблокирована (но горячие клавиши переключения останутся). Можно подставить вместо него kbdus.dll - опять же будет только Eng.  
     
     
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 05:37 09-04-2008 | Исправлено: NIKZZZZ, 05:44 09-04-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZloyBehemoth, была когда-то такая задача мне не по зубам
     
    1. используя copy/y
     
    Код:
    @echo off&chcp 1251>nul
    echo
    .
    set "list=list.txt"
    set "cp="
    for /f "delims=" %%a in (%list%) do set "n=%%a"&call:1
    goto:eof
    :1
    for
    /r %cp% %%b in ("%n%") do @if /i exist "%%b" set "p=%%b"&call:2
    goto:eof
    :2
    set
    "p=%p:"=%"
    title Копирование файла из списка "%list%" в назначение "%cp%"
    echo Обнаружен дубликат "%p%" файла "%n%"
    echo Заменяем файл "%n%" на его дубликат "%p%"
    echo copy/y "%n%" "%p%"
    :: copy/y "%n%" "%p%"
    echo.
     
    для работы кода размундирь команду
     
    2. используя всеми забытый replace
     
    Код:
    @echo off&chcp 1251>nul
    set
    "list=list.txt"
    set "cp=c:\"
    for /f "delims=" %%a in (%list%) do replace/s "%%a" "%cp%"
     
    для успешной работы код, список и файлы надо положить в любую папку
    предполагатся, что список файлов создавать умеем

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 06:02 09-04-2008 | Исправлено: Nagual, 06:10 09-04-2008
    ZloyBehemoth



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

    Цитата:
    поставь в конец батника pause, запусти батник, скопируй и выложи здесь.

     

    Цитата:
    D:\root>FOR /R D:\root\ %c IN (FreeCommander.ini) DO (
    del %c    
     xcopy "\\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini" "%~dpc"  
    )  
     
    D:\root>(
    del D:\root\FreeCommander.ini    
     xcopy "\\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini" "D:\root\"  
    )  
    \\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini
    Скопировано файлов: 1.
     
    D:\root>(
    del D:\root\Grand\FreeCommander.ini    
     xcopy "\\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini" "D:\root\Grand\"  
    )  
    \\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini
    Скопировано файлов: 1.
     
    D:\root>(
    del D:\root\Grand\freeCommander\FreeCommander.ini    
     xcopy "\\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini" "D:\root\Grand\freeCommander\"  
    )  
    \\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini
    Скопировано файлов: 1.

     
    Пояснения D:\root\ - папка где надо искать, FreeCommander.ini - файл который ищем,
    \\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini - файл которым надо заменить найденный файл.
    После работы батника файл FreeCommander.ini появляется во всех директориях D:\root\.
     
    Добавлено:
    king_stiven
     

    Цитата:
    Попробуй 2 пример.

     
    Второй пример заработал. Но там я не могу указать путь где надо проводить поиск и замену. Пока ищет только внутри директории из котрой его запускают.
     

    Всего записей: 242 | Зарегистр. 12-10-2004 | Отправлено: 07:44 09-04-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZloyBehemoth
    1 Так тебе надо только в папке D:\root\ искать файл, а не в её подпапках?
    2
    Цитата:
    Второй пример заработал. Но там я не могу указать путь где надо проводить поиск и замену. Пока ищет только внутри директории из котрой его запускают.  

    Пример ?
     
    Добавлено:

    Код:

    Код:
    for /f "usebackq tokens=*" %%c in (`dir "D:\root\\FreeCommander.ini" /b /s /a:-d`) do (
        del %%c
        xcopy "\\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini" "%%~dpc"
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 08:34 09-04-2008
    ZloyBehemoth



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

    Цитата:
    Пример ?  

     
    Вот это работает, но ищет только внутри директории в которой запустили батник:
    for /f "usebackq tokens=*" %%c in (`dir "FreeCommander.ini" /b /s /a:-d`) do (  
    del %%c  
    xcopy "\\server\home\1\FoxitReader\FreeCommander\FreeCommander.ini" "%%~dpc"
    )
     

    Цитата:
    1 Так тебе надо только в папке D:\root\ искать файл, а не в её подпапках?  

     
    Нужно искать вглубь структуры начиная от указанного пути, т.е. в данном случае во всех папках и подпапках D:\root\ .
     

    Цитата:
    Код:

     
    Попробую. Спасибо!

    Всего записей: 242 | Зарегистр. 12-10-2004 | Отправлено: 09:57 09-04-2008
    Grim_Repo



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте... Подскажите - реально ли в случае если батник копирует с диска - создавать папку с именем диска, а в ней папки по времени копирования... Затем я вставил следующий диск - батник создал новую папку с именем диска и в ней создал папки по времени копирования...
    Еще было бы неплохо сделать так - чтобы xcopy после того как скопировал все из указанной папки, проверяла ее на изменения и копировал изменившиеся и добавленные файлы...  
    Кстати - реально ли сделать так чтобы, например, в батнике прописан файл конфигурации... В файле конфигурации пишется: set COPYdir=d:\cpdr\ (это директория для копирования )батник при запуске считал из файла конфигурации - куда копировать, затем подставил указанную в файле конфигурации директорию в нужные места в своем коде и начал копирование...  
     
    P.S.
    Еще хотелось бы узнать - как заставить батник записывать ВСЕ свои действия в лог...
    И еще вопрос - когда я запускаю батник для копирования с диска E: (это дисковод в котором нет диска) то появляется мессага (окошко) в котором говорится - "Вставте диск в дисковод"... Как сделать так чтобы это окошко не показывалось?
     
     
    Заранее, спасибо!

    Всего записей: 397 | Зарегистр. 02-05-2006 | Отправлено: 18:56 09-04-2008 | Исправлено: Grim_Repo, 00:33 10-04-2008
    Elroir



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

    Цитата:
    И еще вопрос - когда я запускаю батник для копирования с диска E: (это дисковод в котором нет диска) то появляется мессага (окошко) в котором говорится - "Вставте диск в дисковод"... Как сделать так чтобы это окошко не показывалось?

    Чтобы этот диалог не появлялся, надо в реестре, по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows поставить цифру 2 как значение параметра ErrorMode.

    Код:
     
    Windows Registry Editor Version 5.00
     
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows]
    "ErrorMode"=dword:00000002
     
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:51 10-04-2008
    Dantis

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.  
    Кто может мне помочь написать  батник перезагрузки компа в определенное время?
    мне нужно что бы кадые день в   Три Утра   комп перезагружался обычном способом..типа я нажал    пуск\выключение\перезагрузка.
     
    лучше всего если этот процесс до начала перещагрузки выведит окошко  типа         Сохраните все данные.комп перезагрузится через 30 секунд.

    Всего записей: 26 | Зарегистр. 25-03-2008 | Отправлено: 08:22 10-04-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dantis
    Можно даже не писать батник, просто добавь в шедулер на 3 утра каждый день:
     
    shutdown /r /t 30

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:56 10-04-2008
       

    Страницы: 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-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru