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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 100 101 102 103

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    realister12
    Очень интересно.
    Измени код replace_spaces.cmd:

    Код:
     
    @echo off
    setlocal
    echo %%1 = %1
    set "name=%~nx1"
    echo name = %name%
    set "name=%name: =_%"
    echo name = %name%
    echo ren "%~1" "%name%"
    pause
     

    запусти на каком-нибудь файле (или директории) с пробелами и выложи сюда результат, который появится в консольном окне.  
     
    P.S. Код предназначен для Win2000 и выше (не включая Vista - просто не проверял)

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:25 03-03-2008
    realister12



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    %1 = "C:\temp\dfdf dsgfdsg dsgdsg"
    name = dfdf dsgfdsg dsgdsg
    name = dfdf_dsgfdsg_dsgdsg
    ren "C:\temp\dfdf dsgfdsg dsgdsg" "dfdf_dsgfdsg_dsgdsg"
    Press any key to continue . . .
     
    ОС 2к3

    Всего записей: 507 | Зарегистр. 10-03-2005 | Отправлено: 01:45 03-03-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    realister12
    Не понимаю, почему у тебя не работает. Батник отрабатывает правильно.
    Попробуй зайти в директорию c:\temp в консоли и запустить команду:

    Код:
    ren "dfdf dsgfdsg dsgdsg" "dfdf_dsgfdsg_dsgdsg"

    если получится, тогда измени replace_spaces.cmd так:

    Код:
     
    @echo off
    setlocal
    set "name=%~nx1"
    set "name=%name: =_%"
    pushd "%~dp1"
    ren "%~nx1" "%name%"
    popd
     


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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    знаю что спасибы в пм, но  

    Код:
    @echo off  
    setlocal  
    set "name=%~nx1"  
    set "name=%name: =_%"  
    pushd "%~dp1"  
    ren "%~nx1" "%name%"  
    popd

    отработало как надо, папка была переименована. Огромное Вам спасибо

    Всего записей: 507 | Зарегистр. 10-03-2005 | Отправлено: 02:14 03-03-2008
    Roofo

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как из bat-файла определить сколько места занято на логическом диске.
    Сам пока решил задачу так
     
    dir | find "байт свободно" > dir.txt
    For /F "tokens=3" %%I In (dir.txt) Do  set FREE=%%I
    set FREE=%FREE:я=%
    set FREE=%FREE:~0,-3%
     
    но может есть более изящное решение?

    Всего записей: 63 | Зарегистр. 10-04-2006 | Отправлено: 17:56 03-03-2008
    01MDM



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

    Код:
     
    @echo off
    for /f "tokens=3*" %%i in ('dir C:\') do set line=%%i %%j
    :next
    set /a tok+=1
    for /f "tokens=%tok%" %%i in ("%line%") do (
        echo %%i | findstr [0-9] 1>nul && set size=%size%%%i
        if not "%%i"=="" goto:next
    )
    echo %size%
     

     
    или с помощью wmic, но у меня сходу не получилось отпарсить вывод

    Код:
     
    wmic logicaldisk where name="C:" get freespace /value
     

     
    Кстати результаты отличаются.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:24 03-03-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Roofo
    А что тебя не устраивает?

    Код:
    @echo off
    chcp 1251 > nul
    For /F "tokens=3" %%I In ('dir ^| find "байт свободно"') Do  set FREE=%%I
    set FREE=%FREE: =%
    set FREE=%FREE:~0,-3%
     

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 04:43 04-03-2008
    PegasusUnicorn

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что-то у меня часто не срабатывает эта штука:
    set datetimetemp=%date%_%time:~0,-3%  
    set datetimetemp=%datetimetemp::=-%
    md E:\COPY.BASES\%datetimetemp::=-%
    CD E:\BASES
     

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



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

    Цитата:
    Что-то у меня часто не срабатывает эта штука

    Что значит "часто"?
     
    И поясни, что ты делаешь:

    Цитата:
     
    md E:\COPY.BASES\%datetimetemp::=-%
    CD E:\BASES  
     

     

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

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

    Цитата:
    А что тебя не устраивает?

    дело в том, что "байт свободно" работает только на русской версии Windows, а хотелось бы большей универсальности.
    И мне нужно знать сколько ЗАНЯТО места на разделе. Забыл сказать, что определял свободное место только потому, что заранее знал размер раздела и сколько занято определял вычитанием.
     
    01MDM
    Спасибо. Разберусь, попробую...

    Всего записей: 63 | Зарегистр. 10-04-2006 | Отправлено: 10:12 04-03-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Max441
    насколько я понял тебе нужно что-то вроде
    Код:
    @echo off
    chcp 1251>nul
    :next
    set /p "c=Введите имя компьютера: "
    set /p "l=Введите имя профиля: "
    set q="\\%c%\C$\Documents and Settings\%l%\Local Settings\Application Data\test\"
    if exist %q%bookmark_old.nsf (del/q %q%Cache.ND&move/y %q%bookmark.nsf bookmark_old.nsf)
    goto:next

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:58 04-03-2008 | Исправлено: Nagual, 19:39 04-03-2008
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Roofo
    Оптимальный вариант сделать это средствами VB-скрипта. Скопируй нижеуказанный код в файл и обзови, например GetDriveBusy.vbs

    Код:
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set DriveC = FSO.GetDrive("C:")
    Total = DriveC.TotalSize
    Free = DriveC.FreeSpace
    Busy = Round((Total - Free) / 1024 / 1024 / 1024, 2)
    MsgBox "Локальный диск C:\" & vbCrLf & _
           "Занято: " & Busy & "GB"

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 12:06 04-03-2008
    Takuja

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Парни привет еще разок.  
    Помогите создать "мониторинг"  трасировки задержек по милисекндам.
     
    По сюжету можно было бы использовать команду Ринг и Трасер, трасером определять все айпи адреса и пинговать их вписывая всё в документ, но я уверен что кто то может предложить решение по лучьше.  
    Суть такая, что нуужет Батник, каторый выводил бы мне журнал в виде  
     
    время    хост1    хост2    хост3    хост4    хост5    
     
    10:10:01   10мс      50мс    30мс     *         *    
    10:10:02   10мс      50мс    30мс     15мс   6мс    
     
     
    как это организовать средствами СМД, давайте подумаем, это задача не из простых, но очень актуальных для работы с сетями, для проверки и иногда для дрюкания провайдера на бабулевичи.

    Всего записей: 64 | Зарегистр. 11-02-2008 | Отправлено: 12:35 04-03-2008
    Joolz

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

    Цитата:
    wmic logicaldisk where name="C:" get freespace /value  

     
    Хм, только хотел узнать как решить задачку, а тут уже есть и вопрос и ответ.
     
    На базе приведенного состряпал батник, который выводит только объемы для всех дисков, но для красоты вывода хотелось бы все перевести в мегабайты, а тут засада - не знаю как переменную перевести в другую категорию, т.к. при попытке присвоить переменной значение %%а оно ругается на превышение 32 бит. Как побороть?
     

    Код:
     
    for /f %%a in ('wmic logicaldisk get freespace') do (
    if NOT %%a==" " echo %%a | FINDSTR [0-9]
    )
     

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 14:34 04-03-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Takuja
    попробуй так
     
    log_servers.cmd
    Код:
    @echo off
    title ‘®§¤ -ЁҐ ®взсв  Їа®ўҐаЄЁ бҐаўҐа®ў...
    set serv_list=google.com ya.ru rambler.ru
    for %%a in (%serv_list%) do (
    echo
    ===============================================================================>>log.txt
    call:time
    echo
    Џа®ўҐаЄ  %%a>>log.txt
    ping %%a>>log.txt
    echo.>>log.txt)
    goto:eof
    :time
    echo %date% %time:~0,-3%>>log.txt

    код должен быть сохранён в кодировке cp866 (DOS), соответственно, файл отчёта будет генерироваться в той же кодировке

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 16:42 04-03-2008 | Исправлено: Nagual, 19:27 04-03-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Joolz
     
    Если число в переменной получается слишком большим, то наверное надо рассчитывать по разрядам или воспользоваться каким-нибудь калькулятором, я использую clcc.exe

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здраствуйте! У меня простой вопрос: реально ли создать такой bat-файл, который запустит из сети  по адресу типа "//блаблабла/бла-бла/" что-нибудь, или который сам сработает будучи запущеным из сети? У меня не получается, в чёрном окошке пишется  "Указанный путь был использован при запуске CMD.exe в качестве текущей папки. CMD.exe не поддерживает пути UNC. По умолчанию выбрана системная папка Windows".  
    Дело в том, что мне нужно чтобы на всех компьютерах в сети запускался этот bat-файл (который в свою очередь запускает reg-файл с ключом /s), поэтому я в групповой политике прописываю этот батник при автозагрузке всем пользователям - а он не срабатывает.
    Как можно решить проблему, поделитсь пожалуйста опытом .

    Всего записей: 22 | Зарегистр. 14-02-2008 | Отправлено: 18:48 04-03-2008 | Исправлено: 81sanek81, 18:53 04-03-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    81sanek81
    http://support.microsoft.com/kb/156276

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 18:56 04-03-2008
    81sanek81

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Благодарю!
    Но я чё-то как-то недопонял на англисском, можно на русском озвучить?

    Всего записей: 22 | Зарегистр. 14-02-2008 | Отправлено: 19:54 04-03-2008 | Исправлено: 81sanek81, 20:15 04-03-2008
    igor_andreev

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

    Код:

    REGEDIT4  
     
    [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]  
    "DisableUNCCheck"=dword:00000001

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 20:22 04-03-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 100 101 102 103

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru