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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mouser
    Если тебе действительно нужен ! вначале имени файла, то тут проблемы.
    Можно, правда, обойти созданием 2х файлов со списком папок: в одном исходные, во втором - желаемые.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 12:35 26-10-2009
    mouser

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

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 13:17 26-10-2009
    king_stiven

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

    Код:
    @echo off
    chcp 1251 > nul
    for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do (
        if exist "%%i:\-=*=-" (
            for /D %%e in ("%%i:\-=*=-") do (
                for /f "tokens=2 delims==" %%f in ("%%e") do (
                    REN "%%e" "!%%f" && echo %%e переименован в !%%f >> 1.txt || echo %%e найден но не переименован >> 1.txt
                )
            )
        )
        for /f "tokens=*" %%k in ('dir /b /s /a:d "%%i:\-=*=-" 2^>nul') do (
            for /f "tokens=2 delims==" %%f in ("%%~nxk") do (
                REN "%%k" "!%%f" && echo %%k переименован в !%%f >> 1.txt || echo %%k найден но не переименован >> 1.txt
             )
         )
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 16:02 26-10-2009 | Исправлено: king_stiven, 16:06 26-10-2009
    llanowar



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите, как узнать имя текущего залогиненного пользователя на компе по сети?  
    пробовал через psexec.exe <комп> -с 1.cmd , где 1.cmd одержит echo %username%, но все время получаю свое имя пользователя. Какие есть варианты?

    Всего записей: 110 | Зарегистр. 11-10-2007 | Отправлено: 18:00 26-10-2009
    VisioNRU

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

    Цитата:
    [/q]
    [q]VisioNRU  
     
    "железно" у меня (workstation, старая) 3 или 4 COM-порта, СОМ-кабель подключен только к одному (что и показывает mode -  
    Цитата:
    Состояние устройства COM1:
    ), посмотрел в GUI - можно задать до 256 номеров COM-порта: от COM1, COM2 до COM256. В реестре я не силен, но, ИМХО, если  
    Цитата:
    проблема вот в чем после установки XP один из com портов (4) обзывается почему то 5.  
    так вот.. необходимо что то типа проверки на  последовательность 1,2,3,4,5 и если после 3 идёт сразу 5, то переименовать 5 в 4.
     
    то это должно отражаться в:  
    Windows Registry Editor Version 5.00  
     
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]  
    "\\Device\\Serial0"="COM1"  
    "\\Device\\Serial1"="COM2"  
     
    Вообще, наверняка, на http://forum.ru-board.com/ есть топик по реестру - там уж точно знают, где что.  
    смотри в сторону реестра и команд командной строки для работы с реестром, например - reg add:  
     
    .............  
    :notMatch  
    reg add HKLM\HARDWARE\DEVICEMAP\SERIALCOMM /v \Device\Serial0 /t REG_SZ /d COM1 /f  
    и т.д. (что-то такое, проверь синтаксис, здесь - Задачи на bat-файлах - на форуме есть примеры использования синтаксиса reg add)

    огромный thanx... с реестром знаком. =)

    Всего записей: 14 | Зарегистр. 17-10-2009 | Отправлено: 19:38 26-10-2009
    wolf0425



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

    Цитата:
    у меня не выходит .... впихнуть в цикл который был  предложен ранее  

    выноси все переименование в подпрограмму и правь имена в ней.
    как-то так:
     
    do call :_REN "%%k"
     
    goto :eof
     
    :_REN
    set "%oldname%=%~n1"
    set "%newname%=! %oldname:~2,-2%%~x1"
    ren "%oldname%%~x1" "%newname%" && echo %1 переименован в %newname% >> 1.txt  || echo %1 найден но не  переименован >> 1.txt
    goto :eof
     
    Добавлено:
    king_stiven, с твоим вариантом будут проблемы при лишних "=" в середине имени.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:15 26-10-2009 | Исправлено: wolf0425, 21:18 26-10-2009
    king_stiven

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

    Цитата:
    king_stiven, с твоим вариантом будут проблемы при лишних "=" в середине имени.  

    В приведённых челом примерах нет лишних "=", впрочем ему дали много инфы, пусть поработает и сам немножко

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:12 26-10-2009
    Ortios



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

    Цитата:
    Подскажите, как узнать имя текущего залогиненного пользователя на компе по сети?  
    пробовал через psexec.exe <комп> -с 1.cmd , где 1.cmd одержит echo %username%, но все время получаю свое имя пользователя. Какие есть варианты?

    Задавал в предыдущей части вопрос на эту тему, предложив:

    Цитата:
    Может быть можно как-нибудь просканировать папки в профилях \\comp01\c$\Documents and Settings\*.*, определить самый свежий ntuser.dat и потом вырезать из пути имя пользователя?

    но никто не откликнулся, а сам я не осилил эту задачу.

    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 22:35 26-10-2009
    wolf0425



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

    Цитата:
    Подскажите, как узнать имя текущего залогиненного пользователя на компе по сети?    
    Может быть можно как-нибудь просканировать папки в профилях \\comp01\c$\Documents and Settings\*.*, определить самый свежий ntuser.dat  
    для сетевого компа я не делал, делал похожее для локального.
    Разобраться и поменять пути сам сможешь?

    Код:
    setlocal enabledelayedexpansion
    cd /d "C:\Documents and Settings\" && for /d %%i in (*) do (
        pushd "%%~i"  
        for /f %%j in ('dir /b /ah ntuser.dat 2^>nul') do for /f "tokens=1-5 delims=.: " %%1 in ("%%~tj") do set "ntuser-%%3%%2%%1%%4%%5=%%~i"
        popd
    )
    for /f "tokens=3 delims=-=" %%a in ('set ntuser') do set "olduser=%%~a" && goto:selected
    :selected
    set olduser

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:45 27-10-2009 | Исправлено: wolf0425, 01:46 27-10-2009
    slay1212

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    llanowar
     Если уж утили Руссиновича используешь попробуй так:
    psloggedon.exe -l \\comp | find "."  
    Выдает вот что
    Connecting to Registry of \\comp...
                                                                                   
    Users logged on locally:
         26.10.2009 10:28:39    domain\user
    Ну а дальше фильтруешь вывод
     Ну права админа должны на компе быть естественно.

    Всего записей: 336 | Зарегистр. 28-05-2008 | Отправлено: 11:14 27-10-2009 | Исправлено: slay1212, 11:15 27-10-2009
    llanowar



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Спасибо, оба варианта супер!  
     
    Добавлено:
    Итого, скрипт для поиска ключика от винрара на всех компьюетров в списке.  
    Если компьютер недоступен, то пишет в один список, если ключик есть, смотрит какой там сейчас работает пользователь, если ключика ент пишет в третий список. Потом формирует лог с подсчетами.  
     
    Подробнее...
     
    Добавлено:
    Да, еще. При посике пользователей выводятся только доменные пользователи через find /I "RU\", тк. домен называется RU у меня.

    Всего записей: 110 | Зарегистр. 11-10-2007 | Отправлено: 12:07 27-10-2009
    Ortios



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Спасибо, отличный код. Завтра попробую адаптировать к сети.
    slay1212
    Спасибо за подсказку, а то я тоже сначала ломился через psexec

    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 20:47 27-10-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Ты приводил код
    for /f "tokens=1,2 delims=. " %%i in ("%date%") do set "d=%%j_%%i"  
    выводилось почему дата и день недели
    перебором подошло так
    for /f "tokens=2,3 delims=. " %%i in ("%date%") do set "d=%%j_%%i"  
    не подскажешь в чем загвоздка?

    Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 14:50 28-10-2009
    slay1212

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вызывается батник из батника:
    ...
    call par_.cmd setting.ini param2 || exit /b 1
    echo para "%param2%" >> log.log
     
    Но параметр 2 возвращается пустой
     
    Вот что в батнике
    par_cmd
    SETLOCAL ENABLEDELAYEDEXPANSION  
    SETLOCAL ENABLEEXTENSIONS  
     
    ....
    rem paramss строка формируется
    endlocal & set "%2=%paramss%"  
    echo !%2! >> log.log
     
     Печатает новое значение %2
      Можно вернуть новое значение параметра 2 из батника?
    Вроде сделал как здесь написано ан дудки. Можно конечно строчку в файл запихать но хотелось через параметры
     

    Всего записей: 336 | Зарегистр. 28-05-2008 | Отправлено: 14:57 28-10-2009
    segreich

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если не сложно выручите текстом батника.  
    Задача: нужно из известной директории с кучей файлов перенести в другую директорию только один файл.
     
    Пояснение для чего: есть директория с бэкапами и нужно их записать на диски (1 бэкап = 1 диск). Команда для записи дисков в командной строке есть. Нужен поочередный перенос файлов в дирректорию на которую работает команда для записи.
     
    Если что-то подобное было, то буду рад получить посыл в нужном направлении.
     
     

    Всего записей: 29 | Зарегистр. 24-08-2006 | Отправлено: 15:12 28-10-2009
    01MDM



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

    Цитата:
    не подскажешь в чем загвоздка?

    Видимо просили дату и месяц. Поэтому и взял только нужные токены.

    Код:
     
    for /f "tokens=1-3 delims=." %%i in ("%date%") do (
         echo day:   %%i
         echo month: %%j
         echo year:  %%k
    )
     

     
     
     
    Добавлено:
    segreich
    Если правильно понял. Надо последовательно перенести файлы из одной директории в другую, в которой перенесенный файл записывается в бэкап? А что потом с этим файлом, удаляется?

    Код:
     
    @echo off
    for %%i in ("dir1\*.*") do (
           move "%%i" "dir2"
           call:backup "%%~nxi"
    )
    goto:eof
     
    :backup
    pushd "dir2"
    echo Insert CD and press Enter
    pause 1>nul
    echo here writing %1
    del %1
    popd
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:51 28-10-2009 | Исправлено: 01MDM, 17:09 28-10-2009
    segreich

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Спасибо за ответ.
     

    Цитата:
    Если правильно понял. Надо последовательно перенести файлы из одной директории в другую, в которой перенесенный файл записывается в бэкап? А что потом с этим файлом, удаляется?  

    Один файл переносится в папку для записи, потом запись этого файла, потом удаление этого файла, потом  перенос следующего файла и т.д.
     
    Как я понял мне после "echo Insert CD and press Enter" осталось вставить команду на запись?
     
    Добавлено:
    Попробовал, вроде все ок
    Надпись Insert CD and press Enter оказалась не нужна, т.к. nerocmd сама предлагает вставить диск и выдвигает лоток, если стоит записанный диск или его там нет.
    Еще раз, СПАСИБО!

    Всего записей: 29 | Зарегистр. 24-08-2006 | Отправлено: 17:29 28-10-2009 | Исправлено: segreich, 17:55 28-10-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто как думает, вот эта команда
    copy /b "*.*" "OUT_*.*"
    всегда будет склеивать согласно порядку имён файлов? Если не всегда прошу подсказать, вариант с set е=файл1+файл2... не прокатывает, имён слишком много и в них могут кракозябры быть
    segreich
    А может лучше никуда ничего не переносить. а указать nerocmd последовательно копировать файлы в указанной папке?
    for %%i in ("dir1\*.*") do (
           nerocmd "%%i" тут всякие ключи для записи
           nerocmd открыть лоток
           pause
           nerocmd закрыть лоток
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 18:10 28-10-2009 | Исправлено: king_stiven, 18:13 28-10-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    А если их приклеивать в цикле? Т.е за каждый цикл к результирующему файлу приклеивается новая часть? Что-нибудь на вроде:

    Код:
     
    @echo off
    cd.>temp.ext
    for %%i in (*.ext) do call:join "%%i"
    ren temp.ext result.ext
    goto:eof
     
    :join
    copy /b temp.ext + %1 result.ext
    ren result.ext temp.ext
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:31 28-10-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Придётся так наверно, с переименованием, может прокатит с неформатными именами.
     
    Добавлено:
    команда  
    copy /b "*.*" "OUT_*.*"  
    Склеивает файлы согласно времени изменения файлов. Чем можно изменить время изменения файла?
     
    Добавлено:
    Вопрос отпал. nircmd.exe рулит как всегда

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:09 28-10-2009
       

    Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru