Каковы некоторые из менее известных, но важных и полезных функций пакетных файлов Windows?
Руководящие указания:
- Одна особенность за ответ
- Дайте краткое описание функции и пример , а не просто ссылку на документацию
- Ограничение ответов на встроенную функциональность , т. Е. Не требует дополнительного программного обеспечения, такого как Windows Resource Kit
Пояснение: здесь мы ссылаемся на скрипты, которые обрабатываются cmd.exe, который является вариантом по умолчанию для вариантов WinNT.
(См. Также: Пакетные файлы Windows: .bat против .cmd? )
windows
batch-file
hidden-features
Крис Но
источник
источник
call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf
. И чтобы понять все параметры этой линии, просто запуститеC:\WINDOWS\system32\ntbackup.exe /?
.Переходит в каталог , указанный путь .
Возвращает вас в каталог, из которого вы «нажали».
источник
Не уверен, насколько это полезно в командном файле, но это очень удобная команда для использования в командной строке:
Это откроет Windows Explorer в папке «some_directory».
Я нашел это очень экономит время.
источник
open .
делаете то же самое.start
делает гораздо больше, чем просто открыть текущую папку. Вы можете передать ему любой файл, и он откроется с настроенным средством просмотра. Дайте ему URL, откроется ваш браузер по умолчанию и т. Д.Мне всегда было трудно читать комментарии, помеченные ключевым словом в каждой строке:
Легче читать:
источник
rem
это задокументированное ключевое слово, в то время как::
это просто деталь реализации. Хотя маловероятно, что::
он перестанет работать, в целом желательно не полагаться на недокументированное поведение.goto :
чтобы перейти к метке.:-)
иgoto -)
тоже будет работать.Переменные подстроки:
источник
for %a in ...
), поскольку они не требуют знака процента закрытия, как это делают переменные среды; Вы должны сначала назначить их переменной среды (используя отложенное расширение!), а затем извлечь подстроку.Команда ЗА ! Хотя я ненавижу писать командные файлы, я благодарен за это.
будет анализировать каждую строку в myfile.txt, игнорируя строки, начинающиеся с точки с запятой, передавая 2-й и 3-й токены из каждой строки в тело for с токенами, разделенными запятыми и / или пробелами. Обратите внимание, что операторы for body ссылаются на% i, чтобы получить 2-й токен,% j, чтобы получить 3-й токен, и% k, чтобы получить все оставшиеся токены после 3-го.
Вы также можете использовать это для перебора каталогов, содержимого каталогов и т. Д.
источник
Вместо того, чтобы засорять скрипт REM или :: lines, я делаю следующее в верхней части каждого скрипта:
Обратите внимание, как вы можете использовать символы канала и перенаправления, не экранируя их.
источник
Путь (с диском), где находится скрипт: ~ dp0
источник
Часть% ~ dp0 уже упоминалась, но на самом деле есть еще кое-что: символы после ~ определяют извлекаемую информацию.
Отсутствие буквы приводит к возвращению имени файла исправления
d - возвращает букву диска
p - возвращает путь
s - возвращает короткий путь
x - возвращает расширение файла
Итак, если вы выполните нижеприведенный скрипт test.bat из c: \ Temp \ длинное имя каталога \ папка,
вы получите следующий вывод
И если в ваш скрипт передается параметр, как в
test c: \ temp \ mysrc \ test.cpp,
то же самое можно сделать с переменной% 1.
Но результат расширения% 0 зависит от местоположения!
На «верхнем уровне» пакета он расширяется до текущего имени файла пакета.
В функции (вызове) она расширяется до имени функции.
Выход (пакетный файл запускается с myBatch.bat)
источник
Используя CALL, EXIT / B, SETLOCAL & ENDLOCAL, вы можете реализовать подпрограммы с локальными переменными.
пример:
Это напечатает
хотя: sub изменяет x.
источник
Подлый трюк с ожиданием N секунд (не является частью cmd.exe, но не является дополнительным программным обеспечением, поскольку он поставляется с Windows), см. Строку ping. Вам нужно N + 1 пингов, так как первый пинг проходит без задержки.
источник
Спасаясь от «сантехники»:
источник
HEAD^
) является проблематичным.Возможность запуска команд и обработки выходных данных (например, обратных символов '$ ()' в bash).
Если в именах файлов есть пробелы, используйте это:
источник
Создание пустого файла:
источник
type nul > filename.ext
для этого.ren > blah.txt
Чтобы скрыть весь вывод команды перенаправить на> nul 2> & 1.
Например, некоторые программы командной строки отображают вывод, даже если вы перенаправляете на> nul. Но если вы перенаправите вывод, как в строке ниже, все выходные будут подавлены.
РЕДАКТИРОВАТЬ: см. Игнорирование вывода команды для объяснения того, как это работает.
источник
taskkill
.Останавливает выполнение и отображает следующее приглашение:
Полезно, если вы хотите запустить пакет, дважды щелкнув его в проводнике Windows, и хотите увидеть результат, а не просто всплывающее окно командной строки.
источник
echo.|batch-with-pause.bat
будет иметь тот же эффект, что и нажатие «любой клавиши» ...Эквивалент bash (и других оболочек)
который выводит "
Hello
" без завершающей строки. Чтобы сделать это с помощью команды cmd:set /p
это способ предложить пользователю ввести. Он генерирует заданную строку и затем ждет (в той же строке, т.е. без CRLF), чтобы пользователь набрал ответ.<nul
просто передает пустой ответ наset /p
команду, так что в результате получается строка выдаваемого приглашения. (Используемая переменная остается неизменной из-за пустого отклика.)Проблемы: Невозможно вывести начальный знак равенства, а в Vista начальные пробельные символы удаляются, но не в XP.
источник
Поиск и замена при настройке переменных среды:
... удаляет "/" из даты для использования в именах файлов с метками времени.
и подстроки тоже ...
источник
Целочисленная арифметика:
источник
Разделители команд:
Во второй строке команда после && выполняется только в том случае, если первая команда выполнена успешно.
На 3-й строке команда после || запускается только в случае сбоя первой команды.
источник
Выведите пустую строку:
источник
Вы можете соединять операторы if для получения эффекта, подобного короткому замыканию логического `and '.
источник
if foo ( if bar ( baz ) )
(представьте переводы строк после скобок.)Для быстрого преобразования текстового файла Unicode (16 бит / символ) в файл ASCII DOS (8 бит / символ).
в качестве бонуса, если возможно, символы правильно отображаются.
источник
если структура блока:
источник
%ERRORLEVEL%
все равно не должны использовать псевдо-переменную ; вот для чегоif errorlevel <foo>
. И это действительно работает в таких блоках.Задержка раскрытия переменных (с подстроками, добавленными для хорошей меры):
источник
Не обеспечивает большой функциональности, но вы можете использовать команду title для нескольких целей, например, для предоставления статуса длинного сценария на панели задач или просто для улучшения обратной связи с пользователем.
источник
У вас нет удобного редактора, и вам нужно создать командный файл?
Просто введите команды, нажмите ввод для новой строки. Нажмите Ctrl-Z и Enter, чтобы закрыть файл.
источник
Пример вычитания строки для
date
иtime
получения файла с именем «ГГГГ-ММ-ДД ЧЧ: ММ: СС.txt»Я использую,
color
чтобы указать, если мой сценарий завершится успешно, не получится или потребуется какой-либо ввод, изменив цвет текста и фона. Это действительно помогает, когда у вас есть машина в поле зрения, но довольно далекогде X и Y - шестнадцатеричное значение от
0
доF
, где X - фон, Y - текст, когда X = Y цвет не изменится.меняет цвет текста на «Z» и устанавливает черный фон, «цвет 0» не будет работать
для названий цветов звоните
источник
Полный контроль над выводом с пробелами и escape-символами .:
источник
TheSoftwareJedi уже упоминал команду for, но я собираюсь упомянуть ее еще раз, поскольку она очень мощная.
Ниже выводится текущая дата в формате ГГГГММДД, я использую ее при создании каталогов для резервных копий.
источник