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

    @res2001
    Developer, ex-admin
    Дать права на запись в нужный каталог всем пользователям из-под которых запускается скрипт.
    Чтоб пользователи не ползали в этот каталог самостоятельно - не подключайте его как сетевой диск. В программе задавайте UNC путь к каталогу для записи отчета.
    Ответ написан
  • Как посчитать количество разделителей в строке?

    @res2001
    Developer, ex-admin
    Символ крышки ^ является "специальным" для cmd. Так что его не стоит использовать в качестве разделителя, если вы планируете решать задачу на батниках.
    Вообще вашу задачу можно решить так:
    @echo off
    
    set "str=hjh#jhjh#hkjh#khkjh##khkjh"
    set "delim=#"
    set "count=0"
    
    :loop
    call:finddelims
    if defined str goto:loop
    echo.%count%
    goto:eof
    
    :finddelims
    for /f "tokens=1,* delims=%delim%" %%a in ("%str%") do (
    	echo.%%a
    	set /a "count+=1"
    	set "str=%%b"
    )

    Тут я выбрал разделителем символ #, строку задал в переменной str произвольную с разделителями.
    Двойной разделитель считается как 1. Разделитель стоящий в конце строки не учитывается.
    Ответ написан
  • Почему не срабатывает запись в файл?

    @res2001
    Developer, ex-admin
    если делаю: echo %pid% > pack.id
    пишет что вывод команд echo отключен.

    Это происходит когда переменная %pid% не определена (отсутствует).
    Если не вводить символы и просто нажать Enter, то вываливается "ошибка синтаксиса".

    Ошибка возникает на этой строке:
    if /i %pid_flag% EQU y
    когда переменная %pid_flag% не определена. Используйте такой вариант:
    if /i "%pid_flag%" EQU "y"
    И не ясно какого вывода в файл вы ждете?
    Если от этой команды:
    set /A pid=%pid%+1 > pack.id
    то не дождетесь - set ничего не выводит на консоль, если она выполнилась успешно.
    Ответ написан
  • Как сделать конфиг для 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" - подобные софт есть.
    Принцип у всех простой - создается самораспаковывающийся архив с возможностью запуска указанного файла.
    Архив обычно распаковывается во временный каталог. Никакой защиты кода это не гарантирует - любой специалист сможет найти распакованные исходники. Поэтому, обычно, в этом нет смысла.
    Как верно заметил # без наличия в комплекте портабельной версии интерпретатора питона вы не сможете гарантировать работоспособность набора.
    Ответ написан
    Комментировать