Ответы пользователя по тегу cmd/bat
  • Почему bat выводит в wmic неправильный месяц?

    @res2001
    Developer, ex-admin
    Потому что присвоилось значение из последней отфильтрованной findstrом записи: WeekInMonth=2
    Вы можете в вызове wmic отфильтровать столбцы, которые он будет возвращать:
    wmic path win32_utctime get Month /format:list

    На счет часов - тут все просто вы вызываете win32_utctime - она возвращает время в UTC, как это ни странно. Очевидно, в винде выставлен московский часовой пояс - +3 к UTC.
    Используйте win32_localtime вместо win32_utctime.
    Ответ написан
    1 комментарий
  • Как массово переименовать файлы формата PDF с нумерацией?

    @res2001
    Developer, ex-admin
    Сложность в том, что нужно выделить из имени файла его номер и добавить нужное количество нулей.
    Выделить номер можно загнав имя файла в цикл for /f и разделив его на токены. Из токенов нас интересует только 1 токен (номер):
    for %%a in (*) do if /i "%%~xa"==".pdf" for /f "tokens=1,* delims=." %%b in (%%a) do (
      echo %%b
    )

    Во внутреннем цикле в переменной %%b будет номер файла.
    Для того чтобы добавить нужное количество нулей, нужно знать длину номера.
    Функцию определения длины строки возьмите на сером форуме.
    Сам ею не однократно пользовался.
    Ну а дальше просто добавьте впереди 3 нуля к имени файла, а потом обрежте лишние. Команда set умеет выделять подстроки.
    Для справки:
    for /?
    set /?
    Ответ написан
    1 комментарий
  • Как перекладывать файлы по разным маршрутам?

    @res2001
    Developer, ex-admin
    Аналогичные решения на самописных скриптах регулярно встречал в enterprise среде, да и сам использовал. Потому что гибко, можно заточить как хочется, со всеми вывертами enterprise окружения. Никакой готовый софт обычно не в состоянии обеспечить все потребности на 100%, поэтому используют самописные скрипты.
    На батниках все ваши хотелки можно реализовать, используя дополнительные инструменты командной строки. Если плохо знаете язык, то можете использовать любой известный скриптовый язык или подучить cmd, там не весть какая премудрость. В винде кроме cmd и posh из коробки есть еще VBScript и JScript их то же можно использовать. Хорошо для подобных задач подходит python, но его придется ставить отдельно, часто это бывает не приемлемо.
    Ответ написан
    Комментировать
  • Нужно отсортировать все файлы по папкам.?

    @res2001
    Developer, ex-admin
    В вашей задаче несколько проблем:
    1. Убрать двойное расширение. Если расширение всегда фиксировано, то можно просто использовать операцию замены, которая есть в set. Если расширение не фиксировано, то можно использовать 2 вызова процедуры (или вложенные циклы for) и модификатор %%~dpnI.
    2. Выделить подстроку в имени файла. Само имя файла выделить из пути, из которого уже предварительно удалены расширения, можно с помощью модификатора %%~nI. Далее можно использовать цикл for /f для разбиения имени на составные части, разделителем указать символы "+", "-", "_"

    Обход файлов делается в цикле for.

    Для справки смотрите:
    :: тут описание модификаторов и описание разновидностей for
    for /?
    :: операция замены, арифметика, ...
    set /?
    :: Вам нужно будет, скорее всего использовать режим отложенного расширения переменных: ENABLEDELAYEDEXPANSION. Разберитесь с ним, это достаточно тонкий и не очевидный момент
    setlocal /?
    :: просто так
    if /?
    :: Каждая команда cmd имеет свою справку используйте ее. Это основной источник информации по программированию cmd
    ...
    Ответ написан
    9 комментариев
  • Как найти файлы с определенными свойствами?

    @res2001
    Developer, ex-admin
    dir /a-ds /b /s
    Справка по dir: dir /?
    Ответ написан
    Комментировать
  • Как получить список файлов-symlink'ов из директории?

    @res2001
    Developer, ex-admin
    В команде dir ключ /al заставляет ее выводить только ссылки. Ключ /a-d - только файлы.
    Совместить их можно так:
    dir /a-dl /b /s C:\way\
    Остальные ключи посмотрите в справке.

    PS: Спасибо за вопрос. Раньше это как-то не нужно было. Открыл для себя новые возможности dir :)
    Ответ написан
    Комментировать
  • Как выполнить команду в команде?

    @res2001
    Developer, ex-admin
    Отфильтровать строки в текстовом файле можно с помощью findstr.
    Разбить строку на лексемы можно с помощью for /f
    Смотри:
    findstr /?
    for /?
    Ответ написан
    Комментировать
  • Альтернатива sudo/su для Windows?

    @res2001
    Developer, ex-admin
    Параметр в реестре:
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

    отключает действие UAC для процессов запускаемых удаленно. Устанавливать его надо на ПК, на котором будут удаленно запускаться приложения. После установки требуется перезагрузка.
    Когда он установлен и вы запускаете что-то удаленно с правами администратора удаленного компьютера, то программа запускается с реальными администраторскими правами, без фильтра UAC.
    Например с помощью того же psexec (или wmic) можно будет запускать удаленно приложения.
    Не уверен, что это сработает в случае с ssh и telnet, т.к. сервер службы работает на удаленном компьютере.
    Ответ написан
  • Ждёт ли NET STOP завершения службы?

    @res2001
    Developer, ex-admin
    Вроде ждет.
    Но если служба не завершается по какой-либо причине, то не знаю какое поведение. Возможно отваливается по таймауту с каким-нибудь сообщением. Перенаправьте вывод stdout и stderr в файл, чтоб можно было проанализировать позже.
    Вообще есть более продвинутая команда для работы со службами: sc /?
    Можно остановить службу, проверить состояние и если остановлена, то запустить.
    Ответ написан
    Комментировать
  • Как в .bat файле правильно вызвать другой bat и передать переменную?

    @res2001
    Developer, ex-admin
    На сколько понял вся проблема у вас - обработать вывод psexec?
    Для этого есть конструкция for /f
    Например:
    for /f "tokens=* delims=" %%a in ('psexec ... ') do ( 
      echo %%a
    )

    Так же можно перенаправить вывод psexec в файл, а затем в for /f уже читать файл.
    Для справки: for /?
    Ответ написан
    Комментировать
  • Создание папок на каждый день с помощью .bat?

    @res2001
    Developer, ex-admin
    Если упрощенно, то можно так:
    @echo off
    for /l %%a in (1,1,12) do for /l %%b in (1,1,31) do ( md %%a.%%b\wb 2>nul & md %%a.%%b\zaliv 2>nul)

    Но здесь принимается, что в каждом месяце 31 день, а так же не добавляется слева не значащий 0 для расширения номера месяца/дня до 2 символов.
    По простому расширить до двух символов можно используя неfor /l, а обычный
    for %%a in (01 02 03 04 05 ...) do
    Можно, конечно написать функцию, расширяющую строку до заданной длины нужным символом, но лень возиться. Можете погуглить по "cmd padding string", на сером форуме и ру-борде толковые ветки по батникам.

    Задать точное количество дней в месяце можно, используя заранее определенные списки дней для каждого месяца, что-нибудь типа такого:
    setlocal enabledelayedexpansion
    set "mday1=01 02 03 04 05 ..." :: в mday1 - 1 - это номер месяца (январь)
    set "mday2=01 02 03 04 05 ..."
    :: и так далее до mday12
    ...
    for %%b in (!mday%%a!) do ...

    Если не заморачиваться с расширением номеров до двух знаков, то в mdayN можно задавать просто максимальный номер дня и использовать в for /l %%b in (1,1,!mday%%a!) do
    Ответ написан
    Комментировать
  • Как с помощью BAT в dialog вывести значения в файл?

    @res2001
    Developer, ex-admin
    Ваш dialog должен каким-то образом сообщать наружу результаты работы.
    Обычно в консольных утилитах используют либо код возврата (результат return в main), либо, если возвращаемой информации много - текстовый вывод в консоль. В батнике вывод в консоль и код возврата можно обрабатывать так как вам надо.
    То же самое можно и в dialog делать, не зависимо от того, что это не консольное приложение.
    Я бы и на шелл мог бы сделать

    Собственно в никсах все то же самое - вызываемая программа, как-то должна сообщить вызывающей результаты своей работы. Стандартные варианты что в винде, что в никсах одинаковые.
    Ответ написан
  • Как определить переменную среды Environment?

    @res2001
    Developer, ex-admin
    В поиске винды введите "system environment variables" (обычно достаточно только env). Ну и там дальше разберетесь в окошках.
    Ответ написан
    Комментировать
  • Как можно отправить MsgBox определенному пользователю из домена?

    @res2001
    Developer, ex-admin
    Была в винде команда msg, которая умела отправлять сообщения в сети. У меня в Home ее нет, возможно в Pro есть.
    Ответ написан
    1 комментарий
  • Скрипт копирования папок?

    @res2001
    Developer, ex-admin
    Ввод можно сделать с помощью конструкции:
    set /p val="Как назвать новую папку?: "
    В переменной val будет введенная пользователем строка.
    Ответ написан
    2 комментария
  • CMD. Как используя findstr вывести несколько строк подряд?

    @res2001
    Developer, ex-admin
    Если certutil умеет выводить данные только по конкретному сертификату из списка отзыва, то можно найдя вашей командой искомый серийник еще раз вызвать certutil уже с конкретным сертификатом.
    Винды под рукой сейчас нет, проверить свое предположение не могу.
    Ответ написан
    Комментировать
  • ALT+F4 через BAT как?

    @res2001
    Developer, ex-admin
    Через bat не возможно.
    Для этого нужно использовать сторонние утилиты типа autoit или nircmd.
    Ответ написан
  • Как правильно запускать exe через bat?

    @res2001
    Developer, ex-admin
    Из батника ехе запускается очень просто: Y:/finalversion.exe
    Ваша конструкция (через start) то же должна работать, но это лишнее.
    Другой вопрос как вы запускаете сам батник.
    Ответ написан
    1 комментарий
  • Как получить мак адресс в переменную?

    @res2001
    Developer, ex-admin
    Примерно так: запускаете ipconfig /all | findstr ... - ipconfig выводит портянку данных по сетевым соединениям, с помощью условия в findstr фильтруете вывод ipconfig так что бы оставалась одна строчка с нужным МАСом.
    Всю конструкцию загоняете загоняете в for /f:
    for /f "tokens=... delims=..." %%a in ('ipconfig /all ^| findstr ...') do (
      start browser %%a
    )

    Сейчас под рукой винды нет, поэтому подробней не напишут.
    Для справки:
    ipconfig /?
    findstr /?
    for /?
    Ответ написан
    Комментировать