Задать вопрос
Ответы пользователя по тегу cmd/bat
  • Как изменить сервер обновления NOD32 программно?

    @res2001
    Developer, ex-admin
    Видимо НОД хранит эти данные в реестре, раз вы указываете тег regedit.
    Для работы с реестром есть команда:
    reg /?
    reg query /?
    reg add /?
    и т.д.

    Так же можно на одном компе сделать руками и выгрузить нужную ветку реестра в файл.
    Загружать файл на других компах командой:
    regedit /s <имя файла>
    Ответ написан
    Комментировать
  • Как работает команда SET в консоли windows?

    @res2001
    Developer, ex-admin
    1.Потому что так работает cmd.exe - это не вина команды set.
    Дело в том, что cmd.exe командные файлы обрабатывает построчно.
    Он берет очередную строку из файла целиком, перед тем как ее исполнить разъименовыввает переменные, т.е. вставляет непосредственно в команду содержимое переменной и только потом выполняет команду.
    Поэтому появляется эффект, который вы описали.
    В вашем случае командного файла нет, но cmd.exe воспринимает переданную ей строку как единую команду и работает с ней точно так же как и со строкой командного файла.
    Вы можете обойти это просто спустив echo %PATH% на отдельную строку, но для этого придется создать батник.
    Но в вашем случае такое изменение переменной PATH ничего вам не даст, т.к. действие команды set будет актуально только внутри текущего сеанса выполнения cmd.exe.

    2.Хорошо бы посмотреть как конкретно ругается программа.
    Мне кажется, что в первом случае она находит какие-то аналогичные библиотеки, которые лежат в другом месте (прописанном в PATH), но они ей не подходят - другая версия или они вообще левые, просто называются так же.
    Во втором случае поиск начинается сразу с нужного каталога и находятся нужные библиотеки.
    Ответ написан
  • Какими буквами нельзя начинать название файла?

    @res2001
    Developer, ex-admin
    Вообще командная строка винды достаточно капризна к не буквенно-цифровым символам. И не только в начале файла, но и в любом месте имени файла или каталога.
    Выше перечисленные Сергей В символы нельзя использовать, потому что это спец.символы cmd.exe (используются ею для собственных нужд), но есть еще куча других символов, которые не являются спец.символами, но от которых cmd.exe так же корежит. Поэтому лучшая рекомендация тут - вообще не использовать не буквенно-цифровые символы в названиях файлов.
    Так же сходу могу добавить к списку:
    ! - при использовании в батнике команды setlocal enabledelayedexpansion восклицательный знак становиться спец.символом
    % - внутри батника является спец.символом.
    ^ - является спец.символом

    Символы, которые cmd.exe нормально переносит: _.,~@#-+=/{}[]'` и пробел
    Кстати двоеточие, похоже, актуально только для начала файла, в любом другом месте - его использовать можно.

    В свое время мне пришлось обходить проблему не стандартных символов в cmd.exe, поэтому знаком с ней не понаслышке.
    И еще, проблемы с символами появляются именно в применении к командным файлам cmd.exe, если у вас другая задача, то возможно, эта проблема не будет для вас стоять так остро.
    Ответ написан
    Комментировать
  • Создать проверку существуют ли файлы или папки в определенном каталоге?

    @res2001
    Developer, ex-admin
    Начну с конца: cmd не поддерживает работу с датами ни в каком виде.
    Дату последнего изменения файла получить можно, но это будет дата в текстовом виде. Дальше нужно вручную выделять все составляющие даты и с помощью скудных возможностей set /a и кучи if вычислять была она позже 4 часов или нет. Сделать можно, но это будет ... "не технологично" :-)
    В свое время я писал скрипт на bat переводящий дату в timestamp и обратно. Могу поискать, если заинтересует.
    Я бы предложил вам использовать скрипт на powershell, vbs, js - все они умеют работать с датами. Реализовать на них вашу задачу довольно просто.

    Проверка существования файлов и подпапок в заданной папке:
    set "indir=c:\papka"
    :: Проверка существования файлов:
    for /f "tokens=* delims=" %%a in ('dir /b /a-d "%indir%\*" ') do (
      echo.Есть файл: %%~fa
    )
    :: Проверка существования каталогов:
    for /f "tokens=* delims=" %%a in ('dir /b /ad "%indir%\*" ') do (
      echo.Есть каталог: %%~fa
    )


    Если служба "отваливается" путем завершения процесса службы, то проще проверять существует ли запущенный процесс с помощью tasklist и ее фильтров. Смотрите tasklist /?
    Ответ написан
  • Как заставить bat запускаться от имени админа?

    @res2001
    Developer, ex-admin
    С помощью runas привилегии повышаются действительно только для встроенного администратора.
    Ничего страшного в том, что бы его активизировать я не вижу. Хотите подстраховаться - смените ему имя. Конечно нужно назначит нормальный пароль.
    Но сохранять с помощью runas /savecred пароль администратора - это выстрел себе в ногу. С помощью этого сохраненного пароля и runas можно будет любую программу запускать с повышенными привилегиями из-под любого пользователя. Этим вы сделаете большую дыру в безопасности сети.

    На самом деле не очень понятна цель этого мероприятия - вы меняете IP адрес. Зачем? Чувствую, что, то что вы хотите добиться, должно быть сделано по другому. Варианты:
    1. Сделайте 2 IP на одном интерфейсе и пусть они всегда будут.
    2. Организовать доступ в 172.16.11 подсеть через промежуточный шлюз, на котором в зависимости от некоторых условий можно разрешать доступ или нет.
    3. Можно запускать netsh удаленно с админскими привилегиями, запускать, конечно должен админ, а не пользователь. Если у вас есть АД, то доменный админ может это делать, если АД нет, то на пользовательском компе нужно выставить ключ в реестре:
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
    Этот ключ позволяет при сетевом доступе с админскими правами автоматически повышать привилегии. Локальных пользователей и их привилегии это не затрагивает.

    Более конкретно можно будет сказать, если вы опишите цель смены IP.
    Ответ написан
    5 комментариев
  • Как рекурсивно заархивировать каждый файл?

    @res2001
    Developer, ex-admin
    В предположении, что все папки находятся в одном корневом каталоге (в примере c:\tmp), то примерно так будет:
    @echo off
    set "source_dir=c:\tmp"
    for /f "tokens=* delims=" %%a in ('dir /s/b "%source_dir%\*" ') do (
      rar a "%%~dpna" "%%~fa"
      del /f/q "%%~fa"
    )

    Если папки разбросаны по разным местам, то нужно вносить изменения, например хранить список папок в текстовом файле или в переменной, затем в цикле перебирать каждую папку и упаковывать. Схема будет похожа на вышеприведенный скрипт, немного изменится цикл. Более предпочтительным видится вариант хранения списка папок в отдельном текстовом файле

    В вопросе ничего не сказано куда записывать архивы. Если их записывать туда же, где были исходные файлы, то при повторном вызове скрипта будет конфликт. Нужно предусмотреть пропуск архивных файлов.
    Ответ написан
    Комментировать
  • Как в bat-скрипте сделать echo побуквенно и в одну строчку? То есть, сделать так, будто комп сам что-то пишет в консоли?

    @res2001
    Developer, ex-admin
    Тут основная проблема - вывести строку без перевода каретки.
    Это можно сделать с помощью такой конструкции:
    0<Nul Set /p "Wake Up Neo: "
    echo.other text

    Дальше выводите таким образом текст по буквенно, между командами вставляете небольшую паузу с помощью timeout или ping.
    Для универсальности можно сделать процедуру, которая бы разбивала переданную в параметре строку на символы и выводила с таким эффектом.
    Ответ написан
    Комментировать
  • Как экранировать пути в "dir"?

    @res2001
    Developer, ex-admin
    смотри set /?
    set "fulldir=С:\path\to\file.mp3"
    set "fulldir=%fulldir:\=\\%"
    или
    set "fulldir=%fulldir:\=/%"
    Ответ написан
    3 комментария
  • В чем может быть причина ошибки cmd?

    @res2001
    Developer, ex-admin
    Потому что у вас вызов java ... стоит в операторе if.
    Я не понял что вы хотите этим сказать.
    В любом случае это не корректно - if не может вызывать внешних программ как в bash.
    О чем и сообщается в ошибке, правда ошибка может показаться несколько нелепой на первый взгляд, но на второй уже все нормально :-)
    Ответ написан
    Комментировать
  • Нужно извлечь файлы из архивов .zip?

    @res2001
    Developer, ex-admin
    Как-то так.
    :: Каталог с входными архивами
    set "indir=c:\temp"
    :: Каталог куда складывать выходные архивы, можно указать тот же, что и в indir
    set "outdir=c:\temp\out"
    :: Каталог для временных распакованных файлов
    set "unarhdir=c:\temp\unarh"
    :: Полный путь для запуска архиватора
    set "arh=%ProgramFiles%\WinRAR\winrar.exe"
    for %%a in ("%indir%\*.zip") do (
      "%arh%" x -y "%%a" "%unarhdir%"
      "%arh%" a -y -df "%%~dpna" "%unarhdir%\*"  
    )

    Правильно инициализируйте переменные в начале скрипта.
    Скрипт не проверял, т.к. winrarом не пользуюсь.
    Ответ написан
    Комментировать
  • BAT. Как скопировать часть файла начиная с определённой строки?

    @res2001
    Developer, ex-admin
    Немного допилил:
    @echo off
    set "file=1.txt"
    set "search=Заголовок нужных данных"
    set "header_line="
    for /f "tokens=1  delims=[]" %%a in ('find /i /n "%search%" "%file%" ') do set "header_line=%%a"
    if defined header_line (
      more +%header_line% "%file%"
    )
    Ответ написан
  • Как составить bat-файл для резервного копирования?

    @res2001
    Developer, ex-admin
    Это делается практически одной командой, примерно как ответил dmfun
    Подбираете подходящий архиватор командной строки, изучаете его параметры, тренируетесь на "кошечках", потом получившуюся команду вставляете в батник, а запуск батника в шедулер.
    Могут возникнуть затруднения только с формированием имени файла. Можно воспользоваться переменными %DATE% и %TIME%.
    Содержимое переменных меняется автоматически при каждом обращении.
    Посмотреть текущие значения можно так:
    echo %DATE [%TIME%]

    Из %TIME% скорее всего придется вручную выдергивать числовые значения часов/минут/секунд, это можно сделать либо с помощью выделения подстроки (см. set /?), либо обработав переменную в for (см. for /?).
    Ответ написан
    Комментировать
  • Start xxx.bat: как сделать, чтобы не вываливалось в командную строку?

    @res2001
    Developer, ex-admin
    Как вариант поставить после pause команду exit, то же будет закрывать консоль. Тогда в старте можно не указывать cmd /c
    Ответ написан
    Комментировать
  • Как запускать программу хоткеем однократно? Батник подойдет?

    @res2001
    Developer, ex-admin
    В батнике отловить запущен ли процесс можно с помощью фильтров tasklist.
    Ответ написан
    Комментировать
  • Пишем java код в командной строке?

    @res2001
    Developer, ex-admin
    1.Батником вы можете создать текстовый файл с JAVA кодом:
    echo Это JAVA код>>file.txt
    Каждую строчку ява кода предваряйте командой echo и в конце операторами перенаправления в файл.

    2.Как откомпилировать созданный фай - не в курсе, явой не занимался, думаю что в JAVA SDK есть компилятор командной строки, изучайте его параметры и просто добавьте соответствующую команду в конце батника. Но JAVA SDK не входит в комплект JAVA JRE, который обычно стоит у пользователей компа.

    3.Для автозапуска - поместить в автозагрузку. В винде несколько вариантов автозагрузки, гуглите и смотрите, что вам больше подходит.
    Самый простой способ - поместить батник в каталог автозагрузки текущего пользователя, но возможно вам не это нужно.

    4.Про закрытие - видимо вам нужно предотвратить не закрытие батника, а закрытие выполняемого java кода. В любом случае это достаточно не тривиально и любой способ можно так или иначе обойти.
    Самый простой вариант - стартовать второй процесс, который будет следить запущен ли первый и если нет, то запускать. Но гарантии нет, т.к. сначала могут прибить второй, а потом первый.
    Возможно вас удовлетворит вариант, например, с сокрытием окна выполнения батника, но стандартного способа не существует, есть не стандартные варианты типа утилит cmdow, nircmd - они это умеют (но, например cmdow антивирусы не любят, хотя это и не вирус), так же можно скрыть окно с помощью простого скрипта на vbs/js - гуглите.

    5.На счет запуска из-под администратора - есть команда runas, но она спрашивает пароль, который надо вводить руками. Есть сторонние варианты подобной утилиты - гуглите.

    PS: Ваши хотелки в совокупности достаточно подозрительно выглядят. И они не решаются легко.
    Ответ написан
    1 комментарий
  • Как работать с устройствами которым не присваивается буква (Например Apple Iphone - при подсоединении через шнур)?

    @res2001
    Developer, ex-admin
    Видимо стандартными средствами работать не сможете.
    Поищите у производителя устройства какие-либо утилиты командной строки для работы с ним. Не факт, что они есть в природе.

    Еще есть вариант использовать PowerShell, на сколько знаю там можно организовать копирование например с iPhone, возможно и ваш девайс можно раскрутить аналогичным образом.

    PS: на сколько помню сканеры штрих кодов раньше ничего не позволяли в себя записывать, разве что сменить прошивку с помощью спец.утилит.
    Ответ написан
    3 комментария
  • Скопировать данные с флешки по сети?

    @res2001
    Developer, ex-admin
    По моему cmd не работает с UNC путями. Можно либо подключить сетевой диск с помощью net use, после копирования отключить. Либо сделать это на PowerShell.
    В cmd узнать что в компе есть флэшка можно, например, анализируя вывод wmic value.
    wmic умеет работать с удаленными компами.
    Ответ написан
  • Почему не обрабатывается переменная времени в batch-файле?

    @res2001
    Developer, ex-admin
    1. На счет символов % Moskus правильно сказал, их нужно удваивать в батниках, чтоб они сохранились в параметре программы. Плюсую. Думаю, что проблема именно в этом.
    2. Батники всегда исполняются в среде cmd. Собственно это cmd.exe является интерпретатором командных файлов (.bat и .cmd). Даже когда вы в проводнике запускаете батник двойным ЛКМом, проводник вызывает cmd.exe для исполнения скрипта. В этом легко убедится с помощью менеджера задач.
    3. Переменной %{localtime\:%X} в cmd никогда не было.
    Это легко проверить введя команду set в cmd, она выдаст список всех переменных окружения. Это внутренняя переменная mvp, отношения к cmd не имеет.
    Ответ написан