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

    @res2001
    Developer, ex-admin
    Массивов в cmd нет, но можно их имитировать, генерируя имя переменной на лету:
    set "VAL_%IDX1%_%IDX2%=%VALUES%"
    где переменные IDX1 и IDX2 содержат соответствующие индексы. Вместо индексов, можно использовать,например имена полей из конфига.
    Если структура достаточно большая то переменных будет много. На мой взгляд - это какой-то тупиковый вариант.

    Еще проще: конфиг пишите в формате объявления переменных для cmd (т.е. set "Tables_2_f1_name=Id") файлу дайте расширение bat или cmd (или до запуска копируйте конфиг в bat/cmd) и просто вызывайте его как вложенный батник:
    call config.bat
    Если в конфиге не указывать команду set непосредственно, то напрямую вызвать его через call не получится, но можно в простом цикле читать конфиг построчно и подставлять в команду set.

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

    @res2001
    Developer, ex-admin
    for /f "delims=" %%a in ('cscript //nologo C:\Users\Admin\Documents\123\date.vbs') do del /f /q %%a.vbs

    За подробностями: for /?
    Ответ написан
    Комментировать
  • CMD bat, как сортировать файлы в папке по дате изменения?

    @res2001
    Developer, ex-admin
    Список файлов в отсортированном в обратном порядке по дате виде можно получить с помощью команды:
    dir /a-d /o-d /b *.exe
    Вывод dir заверните в for /f и обрабатывайте только первую запись. Первая запись в выводе dir и будет имя нужного установщика.
    Ответ написан
    1 комментарий
  • Каким наиболее простым способом можно заменить запуск внешней команды в cmd на GUI программу с Drag & Drop?

    @res2001
    Developer, ex-admin
    Если вам нужно сделать ввод имен файлов, то это можно сделать непосредственно в командном файле.
    Команда
    set /p filename="Enter file name: "
    Выведет запрос на ввод имени файла. Можно вводить руками, а можно перетащить из проводника или с раб.стола любой файл. Полное имя файла будет в переменной filename:
    echo.%filename%
    Ответ написан
    Комментировать
  • Как подключиться к WiFi-сети через CMD без профиля?

    @res2001
    Developer, ex-admin
    Гуглите "netsh create wifi profile"
    Ответ написан
    Комментировать
  • Как парсить txt файл с помощью bat файла?

    @res2001
    Developer, ex-admin
    Посмотрите описание:
    for /?
    Ваш случай - это for /f - построчно читает файл и разбивает его на лексемы.
    Например:
    for /f "usebackq tokens=1,2 delims= -" %%a in ("%Src%\*.txt") do (
      echo.%%a = %%b
    )

    На счет set, могу добавить к ответу Saboteur еще такой момент - чтоб пробелы, случайно попавшие в конец строки, не присваивались переменной нужно команду давать в таком виде:
    set "Src=D:\tmp"
    Ваша задача нормально решается на cmd, поэтому можно не искать другой вариант.
    На счет других вариантов - из коробки в винде присутствуют, кроме cmd: PowerShell, JavaScript, VBScript
    Ответ написан
    Комментировать
  • Как заставить систему видеть путь в батнике?

    @res2001
    Developer, ex-admin
    У вас в пути русские буквы.
    По умолчанию кодировка в cmd cp866, а вы батник скорее всего сохранили в кодировке cp1251 (или того хуже в UTF8), поэтому и русские буквы у вас стали кракозябрами и такой путь найтись не может.

    Либо добавьте перед вашей командой в батнике команду
    chcp 1251
    Либо сохраните батник в кодировке cp866 любы доступным средством, только убедитесь, что русские буквы правильно конвертировались.
    Ответ написан
    7 комментариев
  • Как отправить mail из скрипта cmd/powershell?

    @res2001
    Developer, ex-admin
    Из cmd встроенными средствами отправить почту нельзя.
    Вариант с телнетом работает, но родной виндовый телнет клиент (который надо еще устанавливать из компонентов) не поддерживает какой-либо автоматизации. Вручную с его помощью отправить письмо можно, автоматически - нет.
    Можно найти любой другой телнет клиент, которым можно управлять с помощью параметров командной строки или еще другим способом, либо найти консольный почтовый клиент, которые то же имеются. Но все это сторонние средства, которых нет в составе винды.
    Ответ написан
  • Можно ли через bat файл изменить строки в текстовом файле?

    @res2001
    Developer, ex-admin
    Можно и голым батником, без сторонних средств, но с некоторыми ограничениями.
    Но проще, как сказал Борис Сёмов использовать специально для этого предназначенные утилиты типа sed.
    Ответ написан
  • Почему "Неверное имя пользователя и пароль при попытке запустить проводник от имени администратора"?

    @res2001
    Developer, ex-admin
    Узнать имя пользователя, под которым вы работаете в данный момент можно с помощью команды:
    set USERNAME

    По умолчанию стандартная учетная запись пользователя Администратор (для русской винды) заблокирована и ее нельзя использовать.

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

    Поскольку в винде есть UAC, то даже запустив что-либо под пользователем с правами администратора, вы этих прав реально не имеете и требуется повышение привилегий.
    Стандартными средствами повысить привилегии запускаемой из сценария программы можно с помощью powershell скрипта (легко можно нагуглить, он открывает окно запроса повышения привилегий) или с помощью других сторонних утилит (например nircmd, есть и другие).
    Ответ написан
  • Как быстро заменить слова в разных файлах по шаблону из текстового файла?

    @res2001
    Developer, ex-admin
    Напишите на том же php скрипт замены или воспользуйтесь утилитой sed.
    sed линуксовая утилита, но ее виндовая версия есть в составе msys2, git bash, cygwin и т.п. пакетах.
    Вызовы sed можно завернуть в батник.

    Непосредственно использовать bat сценарий для прямой замены скорее всего не выйдет, т.к. в php файлах обычно присутствуют символы, которые являются специальными для bat (такие как: <>&| ...), из-за них bat сценарий будет завершаться ошибкой и работу не сделает.
    Но вызовы sed в батник завернуть можно, т.к. непосредственно замену будет совершать sed, а не батник.
    Ответ написан
    Комментировать
  • КАК записать диски с помощью CMD, PowerShell или Скрипта vbs?

    @res2001
    Developer, ex-admin
    40 приводов? подключены к 40 компам? Это шутка?
    Давно уже не видел бэкапа на CD/DVD.
    Лучше заведите себе внешний жесткий диск и бэкапте туда.

    На счет записи дисков из командной строки - в Вин 10 есть встроенная утилита isoburn, но она пишет только iso образы, которые надо еще создать в вашем случае, а так же в конце записи она открывает окно с сообщением о результате записи.
    Можете воспользоваться cdburnerxp, в его составе есть утилита командной строки для записи дисков. Он много чего умеет. Есть и другие утилиты для этих целей, если cdburnerxp не подойдет.
    Ответ написан
  • Как с помощью скрипта прикрепить файл к pdf (windows)?

    @res2001
    Developer, ex-admin
    Image magic умеет работать с pdf из командной строки. Вызовы можно упаковать в батник.
    Ответ написан
  • Как скорректировать регулярное выражение CMD / BAT?

    @res2001
    Developer, ex-admin
    Если у вас во всех файлах это префикс (20495BW) фиксированной длины (7 символов), то можно воспользоваться конструкцией выделения подстроки. Она описана в справке по команде set /?
    Но, учитывая, что имя файла у вас находится в переменной цикла, то напрямую эту конструкцию применить нельзя - нужно предварительно значение %%a присвоить обычной переменной:
    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    for %%a in (*.jpg) do (
      set "dirname=%%~na"
      set "dirname=!dirname:~,7!"
      md "!dirname!"& move "%%~a" "!dirname!\%%~nxa"
    )


    Но если количество символов до символа подчеркивания может быть разным, то вышеописанный способ не подойдет. В таком случае для разделения имени на части (с разделителем "_") нужно применить for /f:
    @echo off
    for %%a in (*_*.jpg) do (
      for /f "tokens=1 delims=_" %%b in ("%%~na") do  (md "%%b"& move "%%~a" "%%b\%%~nxa")
    )

    При необходимости можно задать несколько символов разделителей - запишите их друг за другом в параметре delims вложенного цикла.
    Ответ написан
    4 комментария
  • Вопрос по vbs, как закрыть определённый процесс при его появлении в диспетчере задач?

    @res2001
    Developer, ex-admin
    От консольного окна можно избавиться запуская скрипт с помощью wscript:
    wscript <имя скрипта>

    Консольное окно от taskkill можно скрыть запуская команду так:
    oShell.Run "taskkill /im update_notepad.exe", 1, True

    На счет ожидания: метод Run объекта WScript.Shell возвращает код возврата запускаемого приложения.
    Если taskkill умеет сам сигнализировать о проделанной работе, то можно в цикле вызывать taskkill и анализировать код возврата, до тех пор пока по коду не станет ясно, что процесс удален.
    Вам нужно самому выяснить коды возврата taskkill, сделать это можно с помощью простого батника, анализируя errorlevel после вызова taskkill. В документации я нигде кодов возврата taskkill не встречал.

    Если же taskkill не использует коды возврата (многие стандартные виндовые утилиты пренебрегают этим средством), то задача усложняется.
    Один из вариантов - анализировать вывод taskkill, с помощью find или findstr и ловить их код возврата (эти утилиты точно сообщают в коде возврата, что строка найдена или не найдена).
    Другой вариант - сначала выяснить с помощью tasklist запущен ли ваш процесс и только потом вызывать taskkill.

    И не забывайте делать паузы между вызовами taskkill, т.к. эта карусель без пауз отожрет у вас изрядно процессорного времени.
    Ответ написан
    Комментировать
  • Где ошибка в bat файле?

    @res2001
    Developer, ex-admin
    start c:\caddy\caddy
    Ответ написан
    Комментировать
  • Как объединить несколько файлов в один exe?

    @res2001
    Developer, ex-admin
    Гуглите например "bat2exe" - подобные софт есть.
    Принцип у всех простой - создается самораспаковывающийся архив с возможностью запуска указанного файла.
    Архив обычно распаковывается во временный каталог. Никакой защиты кода это не гарантирует - любой специалист сможет найти распакованные исходники. Поэтому, обычно, в этом нет смысла.
    Как верно заметил # без наличия в комплекте портабельной версии интерпретатора питона вы не сможете гарантировать работоспособность набора.
    Ответ написан
    Комментировать
  • Как изменить сервер обновления 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, если у вас другая задача, то возможно, эта проблема не будет для вас стоять так остро.
    Ответ написан
    Комментировать