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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    BorlandIMHO

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

    Цитата:
    Не могу понять куда батник выводит значение в МБ

    Присваивает переменной окружения, заданной параметром при вызове (в примере, приведённом в самом батнике - "MB").
      Однако:
    1. Ветка реестра "HKLM\HARDWARE\RESOURCEMAP" - динамическая. Это означает, что она не хранится на диске, а заново формируется при каждой загрузке ОС. И в реестре выключенной системы отсутствует напрочь. Соответственно - извлекать там просто нечего.
    2. Совершенно неясно, зачем вообще узнавать таким хитровыдуманным способом сколько из ПК сп%$#@ли RAM. У хозяина спросить не проще?..

     
    P.S. Ко всему прочему, GetMem.bat выдаёт у меня 0 (Vista x64 Ultimate, 8Gb RAM), т.е. результат его работы некорректен...


    ----------
    http://www.imho.ws

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 21:28 23-12-2016 | Исправлено: BorlandIMHO, 22:19 23-12-2016
    RomanKotel



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

    Цитата:
    У хозяина спросить не проще

    В том то и дело, что хозяйка не знает, и доков нет на комп... И до меня он уже побывал в нескольких руках сомнительной степени надёжности и квалификации - а умерла материнка, и оперативная память на плате отсутствует совсем.
    Про динамическую уже нашел. Не могли бы вы подсказать, где ещё в системных файлах может храниться эта инфа (в любом виде) ?

    Цитата:
    Vista x64
    возможно, батник на эту разрядность не рассчитан, у меня тоже 7x64... надо в ХП проверить.

    Всего записей: 35 | Зарегистр. 19-06-2008 | Отправлено: 23:58 23-12-2016 | Исправлено: RomanKotel, 23:59 23-12-2016
    Furee



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди добрые, подскажите пожалуйста как правильно указать диск назначения для тихой установки исталяционного Wise пакета?  
    Если так, то файлы просто распаковываются по указанному пути:

    Код:
    start /wait "" wise_installer.exe /s /x C:\MY_Path\

     
    Т.е. задача каким-то образом подставить инсталятору значение переменной %MAINDIR%... это вообще возможно?

    Всего записей: 766 | Зарегистр. 13-10-2014 | Отправлено: 00:37 24-12-2016 | Исправлено: Furee, 00:47 24-12-2016
    YuS_2



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

    Код:
    set "MAINDIR=C:\"
    start "" /wait wise_installer.exe /s /x "%MAINDIR%"


    ----------
    scio me nihil scire

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:15 24-12-2016
    Furee



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

    Цитата:
    А в чем проблема-то?

    Я наверно не точно описал свою задачу. В том то и проблема, что так не получается.  
    Вы мне советуете тоже самое, что я выше уже указал как опробованное - в этом случае wise_installer.exe просто распаковывается в папку %MAINDIR%, а мне надо чтоб туда была произведена установка.
     
    Инсталятор wise.exe, у него заданная переменная %MAINDIR% для установки, вот ее мне и надо каким-то образом изменить/подставить именно через командную строку при запуске установки.  
    Здесь читал про ключи для wise инстаряторов, но ключ /M=filename тоже не работает. Создаю файл INSTVAR.TXT пишу в него строчку типа MAINDIR="D:\MyApp\", запускаю
    Код:
    wise_installer.exe /s /m=INSTVAR.TXT
    , и нечего... он все равно устанавливается куда ему надо, хотя если устанавливать руками, то ему можно задать любое место для установки.

    Всего записей: 766 | Зарегистр. 13-10-2014 | Отправлено: 17:46 24-12-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RomanKotel
    Задача поставлена как? Восстановление работоспособности? Так восстанавливайте, для этого не требуется знать сколько оперативы было раньше. Один фиг - мать менять... Оперативки - меньше 2Гб по нынешним временам ставить глупо, больше 4Гб - бессмысленно для 32-бит ОС... Ну и мать, если не из новых брать на замену, может более 2Гб не поддерживать.

    Цитата:
    где ещё в системных файлах может храниться эта инфа (в любом виде)

    В системе как таковой - нигде. Могут случайно лежать отчёты чего-нибудь типа aida64 или подобного ей софта, но если нет уверенности в их наличии - искать их бесполезная трата времени...
    Если ОС ставилась с умолчальными параметрами - можно прикинуть объём стоявшей ранее памяти по размеру c:\hiberfil.sys, размер которого - 1.5 оперативы; и/или c:\pagefile.sys, размер которого от 1.5 до 3 объёмов оперативы.
    Цитата:
    возможно, батник на эту разрядность не рассчитан, у меня тоже 7x64... надо в ХП проверить.
    Проверил, на XP Pro SP3 с 4Гб оперативы (на виртуалке запустил) результат -480, на ней же с 3ГБ результат -992. При 2Гб, правда, показывает правильно, 2048, но сейчас уже в планшеты и смартфоны больше ставят...
    Забудьте про эти два батника как про страшный сон. И желательно в своём посте с ними про некорректность при объёме памяти более 2Гб напишите...
     
    Furee
    Способов изменить путь для тихой установки без изменения всего инсталлятора для Wise не существует. Вот такая замечательная программа...

    ----------
    http://www.imho.ws

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 19:35 24-12-2016 | Исправлено: BorlandIMHO, 19:39 24-12-2016
    Furee



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    Спасибо! Жаль, но хоть время сэкономили мне немного ))

    Всего записей: 766 | Зарегистр. 13-10-2014 | Отправлено: 19:50 24-12-2016
    Furee



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

    Всего записей: 766 | Зарегистр. 13-10-2014 | Отправлено: 11:41 29-12-2016 | Исправлено: Furee, 13:26 29-12-2016
    Rbor

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет, прошу помощи, бьюсь о стену головой)
     
    Задача: реализация копирования файла с заменой даты в имени файла на текущую, добавление и удаление даты в имени файла. Можно в трех файлах разумеется, чтобы логику выбора не выдумывать.
     
    Варианты такие:
    @ echo %date:~8,2%%date:~3,2%%date:~0,2%
    @ echo %date:~6,4%%date:~3,2%%date:~0,2%
    @ echo %date:~8,2%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%
    @ echo %date:~8,2%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
    @ echo %date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
     
    Примеры файлов
    абракадабра_которая_может_включать_подчеркивания_170109.doc
    абракадабра_которая_может_включать_подчеркивания_20170109.xls
    абракадабра_которая_может_включать_подчеркивания_1701092242.zip
    абракадабра_которая_может_включать_подчеркивания_170109224250.txt
    абракадабра_которая_может_включать_подчеркивания_20170109224250.acc
     
    Думал через ПКМ sendto батничек, который скопирует файл в ту же директорию, заменив в зависимости от длины конечной части имени файла на соответствующую конструкцию сейчас.
    Другая строчка скопирует файл и удалит часть с датой/временем
    Третья строчка добавит часть с датой/временем (вероятно для каждого варианта отдельный пункт на выбор)
     
    Пытался найти последнее вхождение подчеркивания через
    for /f "delims=_" %%A in ("%~n1") do set last=%%A
    echo last=%last%
     
    но не выходит каменный цветок..
     
     
    Смысл задачи в том, что при редактировании файла создавать актуальную копию в той же папке..
     
    Заранее спасибо за помощь

    Всего записей: 8 | Зарегистр. 25-05-2005 | Отправлено: 00:49 10-01-2017
    Furee



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rbor
    Если подчеркиваний несколько как в примере и известно их кол-во, то попробовать через tokens=.
    Например вот так отобьет результат third:

    Код:
    set "Source=first_second_third_forth_fifth_20170109224250.acc"
    echo. %Source%
    for /f "tokens=3 delims=_" %%a in ("%Source%") do echo. %%a

     
    А если еще и известно, что то что вам надо находится после последнего подчеркивания и, в delims добавить точку, то выведет именно нужное вам значение. Т.е.:

    Код:
    set "Source=first_second_third_forth_fifth_20170109224250.acc"
    echo. %Source%
    for /f "tokens=6 delims=_." %%a in ("%Source%") do echo. %%a

    отобьет результат 20170109224250.

    Всего записей: 766 | Зарегистр. 13-10-2014 | Отправлено: 03:52 10-01-2017 | Исправлено: Furee, 04:29 10-01-2017
    NIKZZZZ



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

    Код:
    @echo off
     
    set "SourceFullName=абракадабра_которая_может_включать_подчеркивания_20170109224250.acc"
     
    for /f "delims=" %%a in ("%SourceFullName%") do (
      set "SourcePatch=%%~dpa"  
      set "SourceName=%%~na"
      set "SourceExt=%%~xa"
    )  
     
    set "$Name=%SourceName%"
    set "$Date="
     
    :_1
    if "%$Name%"=="" goto :_2
    if %$Name:~-1%==_ goto :_2
    set "$Date=%$Name:~-1%%$Date%"
    set "$Name=%$Name:~0,-1%"
    goto :_1  
     
    :_2
    echo SourcePatch : %SourcePatch%  
    echo SourceName : %SourceName%  
    echo SourceExt : %SourceExt%  
    echo Name : %$Name%  
    echo Date : %$Date%  
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 07:54 10-01-2017
    latin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В языке сценариев bat/cmd есть такая штуковина, как раскрытие переменной с удалением обрамляющих двойных кавычек
    Код:
    %~I
    , но она работает только для аргументов переданных при вызове файла сценария, при передаче аргументов вызова внутренней процедуры файла сценария и при обработке переменных в цикле FOR. Так вот, последним вариантом я и пытаюсь воспользоваться при решении следующей задачи:
    есть входные данные (ввёл пользователь или считали из файла - не важно), эти данные могут содержать пробельные символы, но не должны содержать обрамляющих кавычек. При попытке выполнить такой код
    Код:
    set /p info=Enter data:  
    for %%Q in ("%info%") do (set "info=%%~Q")
    он работает до тех пор пока во входных данных не оказываются двойные кавычки, т. е. эти самые кавычки не удаляются. Пробовал убрать обрамляющие кавычки в условии IN (), но тогда, если входные данные имеют пробельные символы, то они обрабатываются, соответственно, пословно, а должны целым блоком.
    Пока приходит в голову только такое решение
    Код:
    if """ == "%info:~0,1%" (set "info=%info:~1%")
    if """ == "%info:~-1%" (set "info=%info:~,-1%")
     
    Но это, как мне кажется, громоздко. Да и очень хочется узнать есть ли решение при использовании цикла FOR.

    Всего записей: 781 | Зарегистр. 01-03-2006 | Отправлено: 20:24 10-01-2017 | Исправлено: latin, 22:07 10-01-2017
    Sphinx114



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

    Код:
    set /p info=Enter data:  
    for /f "delims=" %%Q in ("%info%") do set "info=%%~Q"

    Всего записей: 1201 | Зарегистр. 26-03-2011 | Отправлено: 22:19 10-01-2017
    latin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sphinx114
    Да, так кажется работает. Есть правда нюансики, но это уже мелочи. Блин, решение  же вроде очевидное, как только его увидел.

    Всего записей: 781 | Зарегистр. 01-03-2006 | Отправлено: 22:56 10-01-2017
    gobleep



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

    Всего записей: 33 | Зарегистр. 14-04-2016 | Отправлено: 12:40 14-01-2017
    taravasya



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Может быть я ошибаюсь.. Но по-моему для установки достаточно скопировать шрифт в папку:
    С:\Windows\Fonts
    Соответственно всё, что нужно, это:

    Код:
    xcopy D:\Путь\К\Папке\Со\Шрифтами С:\Windows\Fonts /Y

    и запуск этого батника от имени администратора...
    SFX, думаю с лёгкостью можно создать при помощи 7z...

    Всего записей: 251 | Зарегистр. 16-11-2007 | Отправлено: 14:28 14-01-2017 | Исправлено: taravasya, 14:29 14-01-2017
    gobleep



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

    Цитата:
    xcopy D:\Путь\К\Папке\Со\Шрифтами С:\Windows\Fonts /Y

     
    Нет, так файлы даже не копируются. Скопировал FARом, посмотрел через проводник их там С:\Windows\Fonts  не видно, открыл в FAR скопированный шрифт, пишет что надо установить.

    Всего записей: 33 | Зарегистр. 14-04-2016 | Отправлено: 16:31 14-01-2017
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gobleep
    How to install a font via the command line? ADD_Fonts.cmd
    Код:
    @ECHO OFF
    TITLE Adding Fonts..
    REM Filename: ADD_Fonts.cmd
    REM Script to ADD TrueType and OpenType Fonts for Windows
    REM By Islam Adel
    REM 2012-01-16
     
    REM How to use:
    REM Place the batch file inside the folder of the font files OR:
    REM Optional Add source folder as parameter with ending backslash and dont use quotes, spaces are allowed
    REM example "ADD_fonts.cmd" C:\Folder 1\Folder 2\
     
    IF NOT "%*"=="" SET SRC=%*
    ECHO.
    ECHO Adding Fonts..
    ECHO.
    FOR /F %%i in ('dir /b "%SRC%*.*tf"') DO CALL :FONT %%i
    REM OPTIONAL REBOOT
    REM shutdown -r -f -t 10 -c "Reboot required for Fonts installation"
    ECHO.
    ECHO Done!
    PAUSE
    EXIT
     
    :FONT
    ECHO.
    REM ECHO FILE=%~f1
    SET FFILE=%~n1%~x1
    SET FNAME=%~n1
    SET FNAME=%FNAME:-= %
    IF "%~x1"==".otf" SET FTYPE=(OpenType)
    IF "%~x1"==".ttf" SET FTYPE=(TrueType)
     
    ECHO FILE=%FFILE%
    ECHO NAME=%FNAME%
    ECHO TYPE=%FTYPE%
     
    COPY /Y "%SRC%%~n1%~x1" "%SystemRoot%\Fonts\"
    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "%FNAME% %FTYPE%" /t REG_SZ /d "%FFILE%" /f
    GOTO :EOF


    ----------
    http://www.imho.ws

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 17:02 14-01-2017
    gobleep



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    Так тоже не получается. Там написано что батник надо сохранить в папку со шрифтами и запустить, запустил но ничего не установилось.
    Залил вот папку с батником и шрифтами http://sendfile.su/1299187 , там всё правильно?

    Всего записей: 33 | Зарегистр. 14-04-2016 | Отправлено: 21:17 14-01-2017
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gobleep
    Проверил. Автор проделал значительную работу, но не доделал...
    1. При запуске "от имени администратора" (а иначе ни в реестр изменений не внести, ни шрифты на место не скопировать) и без параметра шрифты вместо текущей папки ищутся в c:\windows\system32. Естественно, их там нету...
    2. Благодаря маске "*.*tf" в список попадают RTF-файлы. В частности, License.rtf. Он и копируется в папку шрифтов, и для него создаётся совершенно левая запись в реестре.
    3. При наличии в системе файла шрифта с аналогичным именем он тупо перезаписывается и создаётся новая запись в реестре, что, ИМХО, неправильно, ибо потенциально влечёт за собой проблемы...
     
    4. Чтобы всё работало так, как задумано автором, должны выполняться следующие условия:
    а) запуск производится из-под встроенной учётной записи "Администратор" (в английской версии винды, соответственно, "Administrator"); это единственная учётка с админскими правами, на которую по умолчанию не распространяется действие UAC (либо из под любой другой админ. учётки, но при отключённом напрочь UAC).
    и б) шрифты имеют названия "Имя-шрифта.ttf" и "Имя-Другого-Шрифта.otf", пробелы в названиях заменены на минусы, расширение обязательно в нижнем регистре; к примеру, "ALBION_2.TTF" должен быть переименован в "a_AlbionicNrOtl.ttf"
     
    Я попробую слепить из этого что-нибудь более удобоваримое, но не сейчас.
     
    Upd: http://scripts.sil.org/fontutils
    если не лень, разберитесь с утилитой "addfont": похоже, это именно то, что нужно для вашей задачи...

    ----------
    http://www.imho.ws

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 04:54 15-01-2017 | Исправлено: BorlandIMHO, 05:03 15-01-2017
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru