Продолжение строки:
call C:\WINDOWS\system32\ntbackup.exe ^
backup ^
/V:yes ^
/R:no ^
/RS:no ^
/HC:off ^
/M normal ^
/L:s ^
@daily.bks ^
/F daily.bkf
Для быстрого преобразования текстового файла Unicode (16bit/char) в файл (8bit/char).
C:\> type unicodeencoded.txt > dosencoded.txt
DOS ASCII в качестве награды, если это возможно, символы правильно отображаются.
Можно объединить в цепочку если операторы для получения эффекта как булевская переменная замыкания накоротко 'и'.
if foo if bar baz
Разделители команды:
cls & dir
copy a b && echo Success
copy a b || echo Failure
В 2-й строке, команда после & & только выполнения, если первая команда успешна.
В 3-й строке, команда после || только работает, если первая команда перестала работать.
Целочисленная арифметика:
> SET /A result=10/3 + 1
4
Поиск и замена при установке переменных среды:
> @set fname=%date:/=%
... удаляет "/" из даты использования в именах файлов с меткой времени.
и подстроки также...
> @set dayofweek=%fname:~0,3%
Эквивалент удара (и другие оболочки)
echo -n Hello # or
echo Hello\\c
, который выводы" Hello
" без запаздывающей новой строки. cmd взламывает, чтобы сделать это:
<nul set /p any-variable-name=Hello
set /p
способ предложить пользователю вход. Это испускает данную строку и затем ожидает, (на той же строке, т.е. никаком CRLF), чтобы пользователь ввел ответ.
<nul
просто каналы пустой ответ на эти set /p
команда, таким образом, конечным результатом является испускаемая строка приглашения. (Используемая переменная остается неизменной из-за пустого reponse.)
проблемы: не возможно произвести ведущий знак "равно", и на Vista, ведущей пробельные символы, удалены, но не на XP.
PAUSE
выполнение Остановок и дисплеи следующая подсказка:
Press any key to continue . . .
Полезный, если Вы хотите выполнить пакет путем двойного щелчка по нему в Windows Explorer и хотеть на самом деле видеть вывод, а не просто флэш-память окна команд.
Для сокрытия всего вывода от команды перенаправляют к> nul 2> & 1.
, Например, некоторый вывод дисплея программ командной строки, даже если Вы перенаправляете к> nul. Но при перенаправлении вывода как строка ниже весь вывод будет подавлен.
PSKILL NOTEPAD >nul 2>&1
РЕДАКТИРОВАНИЕ: См. Игнорировать вывод команды для объяснения того, как это работает.
Создание пустого файла:
> copy nul filename.ext
Способность к командам выполнения и процессу вывод (как обратные галочки '$ ()' в ударе).
for /f %i in ('dir /on /b *.jpg') do echo --^> %i
, Если существуют пробелы в именах файлов, используйте это:
for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
Выход из "инфраструктуры":
echo ^| ^< ^> ^& ^\ ^^
Подлый прием для ожидания секунд N (не часть cmd.exe, но не дополнительное программное обеспечение, так как это идет с Windows), посмотрите строку ping. Вам нужны ping N+1, так как первый ping выходит без задержки.
echo %time%
call :waitfor 5
echo %time%
goto :eof
:waitfor
setlocal
set /a "t = %1 + 1"
>nul ping 127.0.0.1 -n %t%
endlocal
goto :eof
При помощи ВЫЗОВА, ВЫХОД/B, SETLOCAL & ENDLOCAL можно реализовать подпрограммы с локальными переменными.
пример:
@echo off
set x=xxxxx
call :sub 10
echo %x%
exit /b
:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b
Это распечатает
11
xxxxx
даже при том, что: sub изменяет x.
Путь (с диском), где сценарий: ~dp0
set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%
% ~dp0 часть уже был упомянут, но существует на самом деле больше к ней: символ (символы) после ~ определяет информацию, которая извлечена.
Никакой результат буквы в возврате имени файла исправления
d - возвращается, буква диска
p - возвращает путь
, с - возвращает короткий тракт
, x - возвращает расширение файла
Поэтому при выполнении сценария test.bat ниже от папки c:\Temp\long dir name\
@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0
Вы получаете следующий вывод
test c: \Temp\long dir name\ c:\Temp\long dir name\ .bat c:\Temp\LONGDI~1\test.bat \Temp\LONGDI~1\
И если параметр передается в Ваш сценарий как в [1 111]
тест c:\temp\mysrc\test.cpp
, те же манипуляции могут быть сделаны с %1 переменной.
, Но результат расширения %0 зависит от местоположения!
На "верхнем уровне" пакета это расширяется до текущего пакетного имени файла.
В функции (вызов), это расширяется до имени функции.
@echo off
echo %0
call :test
goto :eof
:test
echo %0
echo %~0
echo %~n0
вывод (batchfile запускается с myBatch.bat)
myBatch.bat
:test
:test
myBatch
Вместо того, чтобы замусорить сценарий R.E.M или:: строки, я делаю следующее наверху каждого сценария:
@echo OFF
goto :START
Description of the script.
Usage:
myscript -parm1|parm2 > result.txt
:START
Примечание, как можно использовать канал и символы перенаправления, не выходя из них.
команда FOR! В то время как я очень не хочу писать пакетные файлы, я благодарен за него.
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
проанализировал бы каждую строку в myfile.txt, игнорируя строки, которые начинаются с точки с запятой, передавая 2-й и 3-й маркер от каждой строки до для тела, с маркерами, разграниченными запятыми и/или пробелами. Заметьте для ссылки операторов body %i заставлять 2-й маркер, %j заставлять 3-й маркер и %k получать все остающиеся маркеры после 3-го.
можно также использовать это для итерации по каталогам, содержанию каталога, и т.д.
Переменные подстроки:
> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456
Я всегда находил трудным прочитать комментарии, которые отмечены ключевым словом на каждой строке:
REM blah blah blah
Легче читать:
:: blah blah blah
Не уверенный, насколько полезный это было бы в пакет файл, но это - очень удобная команда для использования в командной строке:
C:\some_directory> start .
Это откроет Windows Explorer в "some_directory" папке.
я нашел это большим средством экономии времени.
если блочная структура:
if "%VS90COMNTOOLS%"=="" (
echo: Visual Studio 2008 is not installed
exit /b
)
Не обеспечивает много функциональности, но можно использовать команду заголовка для нескольких использования, как обеспечение состояния на длинном сценарии в панели задач, или только улучшить отзывы пользователей.
@title Searching for ...
:: processing search
@title preparing search results
:: data processing
TheSoftwareJedi уже упомянул для команды, но я собираюсь упомянуть его снова, поскольку это очень мощно.
следующие выводы текущая дата в формате YYYYMMDD, я использую это при генерации каталогов для резервных копий.
for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a
Полный контроль по выводу с интервалом и символами ESC.:
echo. ^<resourceDir^>/%basedir%/resources^</resourceDir^>
пример строкового вычитания на date
и time
для получения файла, названного "YYYY-MM-DD HH:MM:SS.txt"
echo test > "%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%_%time:~3,2%_%time:~6,2%.txt"
, я использую color
, чтобы указать, заканчивается ли мой сценарий успешно, отказавший, или нужен в немного введенных путем изменения цвета текста и фона. Действительно помогает, когда у Вас есть некоторая машина в пределах Вашего представления, но вполне далеко
цветной XY
, где X и Y шестнадцатеричное значение от 0
до F
, где X - фон, Y - текст, когда X = Y цвет не изменится.
цветной Z
изменяет цвет текста на 'Z' и устанавливает черный фон, 'окрасьте 0', не будет работать
на названия вызова цветов
цвет?
Редактор не имеет удобными и должен создать пакетный файл?
copy con test.bat
Просто тип далеко команды, нажатие вводит для новой строки. Нажмите Ctrl-Z и Enter для закрытия файла.
Задержанное расширение переменных (с подстроками, добавленными в придачу):
@echo off
setlocal enableextensions enabledelayedexpansion
set full=/u01/users/pax
:loop1
if not "!full:~-1!" == "/" (
set full2=!full:~-1!!full2!
set full=!full:~,-1!
goto :loop1
)
echo !full!
endlocal
PUSHD path
Берет Вас к каталогу, определенному путь .
POPD
Забирает Вас к каталогу, от которого Вы "продвинули".