Ответы пользователя по тегу cmd/bat
  • Как удалить массово папки весом меньше 1mb?

    @res2001
    Developer, ex-admin
    Основная проблема - быстро узанать размер каталога. Стандартных средств cmd для этого нет.
    Остается только делать рекурсивный обход каждого каталога и суммировать размеры каждого файла, как только сумарный размер превысит 1 Мб подсчет можно прекращать и пропускать каталог.
    Размер конкретного файла можно получить из переменной цикла for /f с помощью модификатора %%~zi. Этот же модификатор действует и для нумерованных параметров процедур
    Смотрите:
    for /?
    call /?
    set /?
    rmdir /?
    Ответ написан
    Комментировать
  • Как скопировать файлы по дате изменения посредством bat?

    @res2001
    Developer, ex-admin
    Развернуто не выйдет - нет под рукой винды. Могу дать направление.

    Получить отсортированный по дате изменения список файлов можно с помощью команды: dir /b /a-d /od *
    За сортировку отвечает ключ /od, можно получить обратную сортировку, тогда надо задать ключ /o-d. Ключ /a-d удаляет из вывода каталоги (по умолчанию dir выводит и каталоги то же).
    Эту команду надо запихнуть в цикл, примерно так:
    for /f "tokens=* delims=" %%a in ('dir /od ...') do (
      echo %%a
    <тут команды тела цикла>
    )

    В цикле просто на первой итерации копируете файл в to и to2 и выходите из цикла (goto).
    Для дальнейших действий аналогичные циклы по соответствующим каталогам, только пропускаете первых 5 итераций, на остальных файлы удаляете. Пропустить 5 итераций в цикле можно либо счетчиком в теле цикла, либо есть опция цикла skip.
    Примерно схема уже должна быть ясна.
    Отработайте этапы команды по одному, а потом запихните все этапы в один батник.
    Детали применения команд смотри:
    dir /?
    for /?
    set /?
    goto /?
    Ответ написан
    6 комментариев
  • Bat файл работает через раз как исправить?

    @res2001
    Developer, ex-admin
    В команде call, на соклько помню нужно указывать имя файла с расширением. Она вызывает другой внешний батник. Проверить сейчас поведение команды без указания расширения не могу.
    В любом случае, если тут должен вызваться activate.bat, то надо его смотреть то же.

    По остальным командам вообще не чему тормозить, кроме, конечно питоновского скрипта.
    Ну и не забывайте, что в конце стоит команда pause - она ждет нажатия any key пользователем. Ждать может до посинения.
    Ответ написан
  • Можно ли создать bat файл который будет откатывать изменения?

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

    Если вы надеялись на простой чудесный способ восстановления без предварительного бэкапа, то такого варианта не существует.
    Ответ написан
    Комментировать
  • Можно-ли отправить внешний ip адрес на e-mail через bat скрипт?

    @res2001
    Developer, ex-admin
    Можно.
    Только сначала требуется узнать этот внешний адрес, а затем отправить его по почте.
    Обе эти задачи средствами которые есть в cmd по умолчанию не решить.
    Но если использовать не cmd, а WSH (то же есть в винде по умолчанию, JScript/VBS) или posh, то это облегчит задачу и уже можно будет ее решить не прибегая к сторонним инструментам.
    Ответ написан
    Комментировать
  • Почему выходит синтаксическая ошибка в команде?

    @res2001
    Developer, ex-admin
    Напишите команду start сразу после do.
    Или можно завернуть start в круглые скобки. Открывающая круглая скобка должна быть после do в той же строке.
    Т.е. for вместе с телом цикла - это одна команда для cmd и она должна быть на одной строке. Круглые скобки позволяют обойти это ограничение.
    Ответ написан
    2 комментария
  • Как просмотреть список установленного ПО на удаленном хосте (для локального код прикрепляю)?

    @res2001
    Developer, ex-admin
    Утилита reg умеет запрашивать реестр удаленных компов, если есть доступ, конечно: reg /?
    Эту же операцию можно сделать с помощью wmic, она то же умеет работать с удаленными компами. По моему, она дает более структурированную информацию, чем можно нарыть в реестре в "ручную". Конкретные параметры погуглите.
    Ответ написан
    2 комментария
  • Как сравнить две даты в dat?

    @res2001
    Developer, ex-admin
    Батники не умеют работать с датами. Тут все переменные строковые.
    Да, set /a умеет целочисленную арифметику, но результат все равно строковый.
    Нужно перевести даты в количество дней с начала эпохи, а потом их уже можно сравнивать стандартными средствами.
    Проще всего использовать для этих целей более продвинутые средства, умеющие работать с датами, например powershel, JS, VBS - эти скрипты при желании можно вызывать из батника.
    Но если очень хочется, можно и батником пересчитать. Алгоритм расчета есть на вики. Код можно дернуть отсюда - https://www.robvanderwoude.com/files/datediff_nt.txt
    Ответ написан
    Комментировать
  • Как вывести результат команды cmd в переменную?

    @res2001
    Developer, ex-admin
    Вот так должно работать:
    for  /f "delims=" %i IN ('net user %username% ^| findstr /C:"Действие пароля завершается" ') DO set var=%i
    Ответ написан
  • Как ввести результат поиска cmd в переменную?

    @res2001
    Developer, ex-admin
    Правильная команда: dir /s steam.exe
    Примерно так будет:
    for "tokens=* delims=" %%a in ('dir /s  steam.exe') do (
      move "%%~a" "путь куда перемещаем файл"
    )
    Ответ написан
    2 комментария
  • Добавить задачу в авто запуск?

    @res2001
    Developer, ex-admin
    С помощью утилиты schtasks можно добавлять задания в планировщик.
    С помощью reg add - можно добавить ключи в реестр для автозапуска.
    Но если вам нужны права администратора при выполнении программы, то в обоих случаях при вызовах schtasks и reg вы должны обладать этими правами.
    Ответ написан
  • Как запустить cmd внутри bat для выполнения команд?

    @res2001
    Developer, ex-admin
    Батник и так выполняется внутри cmd. Обычно дополнительно cmd запускать не надо.
    Просто напишите нужные команды в батнике и запускайте в cmd или в проводнике (тогда cmd запустится автоматически и выполнит батник).
    Ответ написан
    2 комментария
  • Как удалить файл превышающий размер?

    @res2001
    Developer, ex-admin
    Проверяйте размер и удаляйте.
    Получить размер файла можно с помощью модификаторов. Описание модификаторов смотрите в call /? или for /?
    Батник запускать из шедулера.
    Ответ написан
    Комментировать
  • Как написать .bat для сканирования измененных файлов и что в етих измененных файлов подставлялась дата?

    @res2001
    Developer, ex-admin
    Отслеживать изменения в файлах можно с помощью аттрибута "архивный".
    Этот аттрибут выставляется автоматически ОС при любом изменении файла.
    Вывести список файлов, у которых аттрибут "архивный" выставлен можно с помощью dir /a:a
    Получить дату/время изменения файла можно с помощью модификаторов переменной цикла. Смотрите for /?
    После переименования файла нужно снимать аттрибут архивный - это будет признак того, что файл уже обработан и в следующий раз он в обработку не попадет (если не будет модифицирован). Сделать это можно командой attrib /?
    Ответ написан
    Комментировать
  • Можно ли изменить размер окна программы и расположение его с помощью батника?

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

    @res2001
    Developer, ex-admin
    vcvars32.bat идет в составе MSVS для установки переменных окружения.
    Так же MSVS устанавливает в меню пуск несколько ярлыков для запуска командной строки, где уже установлены все нужные переменные окружения. Делается это примерно так:
    cmd.exe /K vcvars32.bat
    Ключ /K не дает закрыться cmd.exe после выполнения команды переданной в параметре. Команду привел схематично, можете точную команду посмотреть в ярлыке MSVS. Возможны и другие параметры, которые передаются уже в vcvars32.bat.
    Кстати, есть еще и vcvars64.bat.
    Нет смысла всегда запускать vcvars32.bat при старте cmd. Просто используйте ярлык от MSVS для запуска командной строки.
    Ответ написан
    Комментировать
  • Как создать свой скрытый значок?

    @res2001
    Developer, ex-admin
    Область справа на панели задач это "трей". И это не область скрытых задач. В винде есть специальный API для того, что бы приложение могло размещать свою иконку в трее. Приложение должно само уметь это делать (или это можно сделать с помощью третьего приложения см. ответ benipaz ). cmd.exe такого делать не умеет.

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

    У меня есть bat скрипт запускающийся при старте Window 10

    Почему бы не завершать этот стартовый скрипт? Тогда он не будет висеть в панели задач.
    Другой вариант - можно запустить этот скрипт из планировщика по событию логин пользователя. Задания из планировщика по умолчанию выполняются в скрытом режиме.
    Так же есть другой вариант - запустить батник в скрытом режиме через промежуточный небольшой скрипт на JavaScript или VBScript. Примеры легко гуглятся. При этом можно внедрить JavaScript скрипт в батник таким образом физически оба скрипта будут находится в одном файле. Технику внедрения JavaScript скрипта в батник то же можно нагуглить, ничего сложного там нет.
    Ответ написан
  • Как сделать так что бы html читал переменные из батника??

    @res2001
    Developer, ex-admin
    Подменяете в HTML файле некую кодовую строку на значение переменной окружения, сохраняете в новый временный файл и открываете его в браузере. Чем подменять - дело техники, я бы видимо использовал sed. Будет такой двухстрочный батник.
    Ответ написан
  • Как в JS запустить cmd-код без предварительного создания самого cmd-файла?

    @res2001
    Developer, ex-admin
    Передавайте команду в параметрах к cmd. В командной строке это выглядело бы примерно так:
    cmd.exe /C @for /f %i in ('set /a 1^^^<^^^<10') do @for %j in ("C:\Users\username\Downloads\test5\yd\*.txt") do @if %~zj leq %i del "%j"

    Обратите внимание, что к переменным цикла из командной строки надо обращаться через 1 знак процентов, а не через 2 как в батнике.
    ЗЫ: Не понял, что это вы за конструкции соорудили в set. По моему она не работает. И что она вообще должна делать я не представляю. А вы?
    Ответ написан
    3 комментария
  • Как указать путь к своей папке?

    @res2001
    Developer, ex-admin
    Смотрите описаниние модификаторов в for /? (модификаторы это буквы, которые идут после %~). Там они описаны для переменной цикла, но точно так же модификаторы работают и с параметрами батника, т.е. с переменными вида %0, %1, %2, ...
    Имя запускаемого батника хранится в переменной %0, соответственно применив модификаторы можно из этой переменной получить только путь к батнику: %~dp0
    Ответ написан
    1 комментарий