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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    MsdLamer
    Ищи в версии для печати forfiles, есть много примеров.

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Накропал парочку файликов -- даете дату - получаете номер дня и вторая наоборот - укаываете в параметре номер дня - получаете дату.
     
    http://andryg.ho.com.ua/contents/test/addons/date_num.r_a_r - архив
    http://andryg.ho.com.ua/index.php?p=_klad - страничка
     
    Думаю, что зная номер дня архива .. дальше можно сравнить номер дня архива и текущей дату ...  и принять решение

    Всего записей: 26 | Зарегистр. 07-09-2007 | Отправлено: 12:59 26-01-2008
    dFine2K2K

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужна помощь в написании bat-файла.
     
    Задача в том, чтобы получить
    - версию NT (например, 6.0.6000)
    - битность ОС (x86 или x64)
    - язык системы (например, En-EN)
    Насколько я понял, это можно сделать обработкой результатов команды SYSTEMINFO при помощи FOR. Подскажите, как это логичнее, правильнее сделать? (Плохо понимаю синтаксис команды FOR по обработке подстрок).
    Как обеспечить работоспособность полученного bat-файла на любой машине?
     
    P.S. Существует ли иной способ помимо SYSTEMINFO+FOR для подобных целей?
    Спасибо!

    Всего записей: 8 | Зарегистр. 12-01-2008 | Отправлено: 13:06 26-01-2008
    01MDM



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

    Цитата:
    Насколько я понял, это можно сделать обработкой результатов команды SYSTEMINFO

    Конечно можно, но не на всех OS (например на XP Home нельзя), к тому же для разных языков эта команда делает разный вывод, и может не сработать сортировка по значению.
     
    Такой вариант устроит?

    Код:
     
    @echo off
    for /f "tokens=1,2 delims==" %%i in ('netsh diag show computer /v') do (
        echo %%i | findstr "SystemType" 1>nul && echo %%i: %%j
    )
    for /f "tokens=1,2 delims==" %%i in ('netsh diag show os /v') do (
        echo %%i | findstr "\<Description" 1>nul && echo %%i: %%j
        echo %%i | findstr "\<Version" 1>nul && echo %%i: %%j
        echo %%i | findstr "BuildNumber" 1>nul && echo %%i: %%j
        echo %%i | findstr "BuildType" 1>nul && echo %%i: %%j
        echo %%i | findstr "CSDVersion\>" 1>nul && echo %%i: %%j                      
        echo %%i | findstr "Locale" 1>nul && echo %%i: %%j
        echo %%i | findstr "OSLanguage" 1>nul && echo %%i: %%j                      
    )
     

    Локаль и системный язык в цифровом коде. Можно и через реестр, но я не искал.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:52 26-01-2008
    Smitis



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

    Цитата:
    тут вопрос.  
    Например, распакованный (из CAB) файл имеет уже расширение не EX_, а EXE, как мне получить его имя, чтоб передать в параметр UPX'у?

     

    Код:
     
    @echo off  
    for %%f in (*.dl_ *.ex_) do if %%~zf geq 10000 call :uuu "%%~f"  
    goto:eof  
     
    :uuu  
    echo %~1  
     
    :: Имя
    set fn=%~n1
    :: Имя и расширение
    set fnx=%~nx1
     
    :: Сдесь распаковываем/упаковываем  
     

    Справка %windir%\help\ntcmds.chm

    Всего записей: 3215 | Зарегистр. 09-02-2003 | Отправлено: 15:05 26-01-2008
    dFine2K2K

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

    Цитата:
     
    @echo off  
    for /f "tokens=1,2 delims==" %%i in ('netsh diag show computer /v') do (  
        echo %%i | findstr "SystemType" 1>nul && echo %%i: %%j  
    )  
    for /f "tokens=1,2 delims==" %%i in ('netsh diag show os /v') do (  
        echo %%i | findstr "\<Description" 1>nul && echo %%i: %%j  
        echo %%i | findstr "\<Version" 1>nul && echo %%i: %%j  
        echo %%i | findstr "BuildNumber" 1>nul && echo %%i: %%j  
        echo %%i | findstr "BuildType" 1>nul && echo %%i: %%j  
        echo %%i | findstr "CSDVersion\>" 1>nul && echo %%i: %%j                      
        echo %%i | findstr "Locale" 1>nul && echo %%i: %%j  
        echo %%i | findstr "OSLanguage" 1>nul && echo %%i: %%j                      
    )  

     
    Сохранил в bat-файл (убрав пробелы), запустил, безрезультатно.
    На всякий случай решил проверить вывод команд netsh diag show computer /v и netsh diag show os /v. NETSH сказала мне, что команды DIAG не существует.
     
    Пробовал на Vista Ultimate x64 (RU) и Windows 2000 Pro (RU).
     
    01MDM, немного не по теме моего вопроса. Подскажи пожалуйста, где в следующем коде я совершил ошибку? Хотел я получить "ответы в столбик", убрав кавычки.
     

    Код:
     
    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET TXTDATA=
    FOR /F "delims=," %%i IN ('systeminfo /FO CSV /NH') DO (
        SET TXTDATA=%%i
        echo !TXTDATA:~1,-1!
    )
     

     
    Добавлено:
    01MDM
     

    Цитата:
    можно, но не на всех OS  

     
    Кстати, этот факт я учёл!
    я скопировал в отдельную папку файл SYSTEMINFO.EXE, при помощи Restorator'а добавил в него ресурсы из En-EN\Systeminfo.exe.mui (удалив предварительно из exe-шника утилиты ресурс MUI), переименовал полученный systeminfo.exe в getsysinfo.exe (специально чтобы исключить путаницу модифицированной программы и родной Windows'овой).
     
    Т.о. теперь имею "свой" systeminfo, который говорит ТОЛЬКО по-английски
    Далее либо PATH к нему, либо рядом с bat-файлом можно положить...

    Всего записей: 8 | Зарегистр. 12-01-2008 | Отправлено: 15:17 26-01-2008 | Исправлено: dFine2K2K, 15:19 26-01-2008
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте мастера. Помогите с проблемкой... У меня на работе на компе лежит база которую надо копировать раз в день.... я написал батничек и вот что получилось.  
     
    set d=%date:~0,2%  
    set m=%date:~3,2%  
    set y=%date:~6,4%  
    MD C:\Archive_TDSM\  
    MD C:\Archive_TDSM\Archive_TDSM_%date%  
    XCOPY/E /C "C:\TDSM\*.*" "C:\Archive_TDSM\Archive_TDSM_%date%"  
       
     
    я не профи так что это может показаться глупо..... но работает же....  
     
    итак создается попочка с текущей датой и туда копируется база, мне нужно хранить базу за последние три дня, можно ли сделать так чтобы хранились папочки только за последние три дня а остальные предыдущие архивы удалялись....  
     
     
     
    помогите кто нибудь сам я не поиму...
    СПАСИБО.

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 15:38 26-01-2008
    Elroir



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

    Код:
     
    @echo off
    for /f "skip=3 tokens=*" %%a in ('dir /ad /o-d /b') do echo rd /q /s "%%a"
     

    Запусти в той директории, в которой находятся поддиректории с архивами. Проверь - если батник выводит правильные директории для удаления, тогда убери из кода команду echo (выделенное слово) - батник будет действительно удалять директории.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:19 26-01-2008
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо Работает и еще вопросик, а файлик обязательно должен лежать в этой директории? можно ли запускать его от куда нибудь из другого места? Подскажите...

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 16:35 26-01-2008
    Elroir



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

    Цитата:
    а файлик обязательно должен лежать в этой директории? можно ли запускать его от куда нибудь из другого места?


    Код:
     
    @echo off  
    for /f "skip=3 tokens=*" %%a in ('dir c:\backup /ad /o-d /b') do rd /q /s "%%a"
     

    c:\backup меняешь на свою директорию и можно запускать батник откуда угодно


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:39 26-01-2008
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    пишет C:\........>rd /q /s "Archive_TDSM_21.01.08"  
    не удается найти указанный файл.... Что это? И не удаляет.
     
    Добавлено:
    все разобрался спасибо..... это я не внимателен.

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 17:18 26-01-2008
    01MDM



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

    Цитата:
    NETSH сказала мне, что команды DIAG не существует.

    Не знал, думал что контексты netsh везде одинаковые.

    Цитата:
    Подскажи пожалуйста, где в следующем коде я совершил ошибку? Хотел я получить "ответы в столбик", убрав кавычки.  
     

    Ты указал разделители (delims=,) но не указал какие по порядку части выводить (tokens). Поэтому выводится только первая (%%i). В данном случае конечно можно переделать твой пример, но при этом будет перезапускаться цикл и systeminfo, что очень долго. Из системинфо надо брать только то, что нужно.
     
     
     
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:54 26-01-2008
    Echizen

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужна помощь в написании bat, если конечно это реально...
     
    Действия:
    Он должен переименовать всё файлы в папке из заданного списка.
     
    Спискок допустим такой:
    файл1 -> Файл_1
    файл2 -> Файл_2
    файл3 -> Файл_3
    ......... -> .........
    файлN -> Файл_N
     
    При этом он не должен менять расширение файла, а оставляться его неизменным...
     
    И ещё такого же типа, который будет делать этот список первоначально в папке которой находяться файлы.
     
    А дальше уже дело моих рук...
    Если не сложно, сделайте плс...
     
    Тут уже есть http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=40#19 скрипт для переименования, но не тот, что мне нужен... =(
     

    Всего записей: 28 | Зарегистр. 07-08-2007 | Отправлено: 20:24 26-01-2008 | Исправлено: Echizen, 21:04 26-01-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Echizen
    конкретнее пиши что надо, по русски, с примерами; я понял так:
     
    c:\temp\result.txt переименовать в c:\temp\result_1.txt
    d:\temp\sult.xls переименовать в :\temp\sult_2.xls
                 ...
     

    Код:
    @echo off
    chcp 1251 > nul
    for /f "usebackq tokens=*" %%c in ("список файлов.txt") do (
        set "file=%%c"
        set "file_name=%%~nc"
        set "Expansion=%%~xc"
        call :rename
    )
    goto :eof
    :rename
    set /a count+=1
    ren "%file%" "%file_name%_%count%%Expansion%"

     
    Добавлено:
    делает список файлов
     

    Код:
    @echo off
    chcp 1251 > nul
    for %%c in ("E:\split\*") do echo %%~fc>> "список файлов.txt"

    E:\split -это папка в которой находяться файлы

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:40 26-01-2008 | Исправлено: king_stiven, 21:54 26-01-2008
    SymA



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите батник, который будет сканировать локальную сеть (192.168.0.1-255), выводя расшаренные ресурсы (с правом на запись) в переменную.

    Всего записей: 56 | Зарегистр. 10-12-2007 | Отправлено: 22:35 26-01-2008
    Echizen

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

    Всего записей: 28 | Зарегистр. 07-08-2007 | Отправлено: 23:39 26-01-2008
    PuzzleW

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gamers_hater:
    Smitis +1 !
    Не советую жать установленные файлы, к ТОМУ ЖЕ, предназначенные для установки
    завтра у тебя UPX'y для работы понадобиться чтото чего нету в той обрезанной винде которая ставиться - и тютю
    Или ты хочешь сжать сетап?

    Всего записей: 185 | Зарегистр. 19-12-2005 | Отправлено: 14:40 27-01-2008
    LDAP



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите разобраться.
    Это будет скрипт, который будет копировать по маске из папок определенные файлы и складывать в соответствующие папки на другом диске.
    Примерно скрипт должен выглядеть так:

    Код:
     
    @echo off
    echo ################################ >> log.txt
    echo Дата и время запуска: >> log.txt
    date /t >> log.txt && time /t >> log.txt
    echo ################################ >> log.txt
    echo ---WSS--- >> log.txt
    xcopy D:\Irbis64New\IRBIS64\Datai\DNEPR\*.wss C:\test\ /Y /R /H
    IF ERRORLEVEL 1 Echo Ошибка!!! >> log.txt
    IF ERRORLEVEL 0 Echo Файлы ".wss" скопированы успешно >>log.txt
    echo ---SYS--- >> log.txt
    xcopy D:\Irbis64New\IRBIS64\Datai\DNEPR\*.sys C:\test2\ /Y /R /H
    IF ERRORLEVEL 1 Echo Ошибка!!! >> log.txt
    IF ERRORLEVEL 0 Echo Файлы ".sys" скопированы успешно >>log.txt
    Exit
     

    Но при копировании нужен лог, я хочу чтобы в случаи удачного копирования выдавалось сообщение в лог и в случаи неудачного тоже. Как видно с кода. Но нижний XCOPY тоже выдает удачное копирование, хотя в папке нету файлов .sys и естестно ничего не копируется. Насколько я понимаю скрипт выдает успешное копирование потому, что задано множество, по маске(*.sys). Ну а как сделать чтобы он выдавал код отсутствия файлов, если ни одного не скопировал по маске?

    Всего записей: 522 | Зарегистр. 03-08-2005 | Отправлено: 20:01 27-01-2008 | Исправлено: LDAP, 20:32 27-01-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LDAP
    А используй команду copy, затем
    IF not ERRORLEVEL 1 Echo Файлы ".sys" скопированы успешно >>log.txt || Echo Ошибка!!! >> log.txt

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:04 27-01-2008 | Исправлено: king_stiven, 23:46 27-01-2008
    LDAP



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Дык комманда Copy поддерживает мало опций. А все таки через Xcopy может можно как-то?

    Всего записей: 522 | Зарегистр. 03-08-2005 | Отправлено: 11:33 28-01-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