Пакетный файл Использование Гото

 setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
if %ERRORLEVEL% EQU 0 goto test
if %ERRORLEVEL% EQU 1 goto exam
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
endlocal 

но он будет помечен как “экзамен”, хотя уровень ошибки не равен “1” помогите мне пожалуйста

kennytm's user avatar

105 золотых значков
1082 серебряных знака
1004 бронзовых знака

спросил 4 фев 2010 в 7:08

Bharath's user avatar

Ваша проблема не в goto, а в том, что errorlevel требует специальной обработки, это не обычная переменная окружения. Единственный тест, который вы можете сделать с уровнем ошибки, — это проверить, больше ли он значения или равен ему.

, поэтому вы должны проверять значения уровня ошибки от самого высокого к самому низкому, потому что, если уровень ошибки 1
затем if errorlevel 1
будет правдой, но if errorlevel 0
будет также
быть правдой

 setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
if errorlevel 1 goto exam
if errorlevel 0 goto test
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
endlocal 

, если у вас включены расширения команд и нет переменной среды с именем ERRORLEVEL (без учета регистра). Тогда теоретически вы можете использовать %ERRORLEVEL% как обычную переменную среды. Так что это тоже должно работать

 setlocal EnableExtensions
set /A sample =1
:first
type C:\test.txt | find "inserted"
if %errorlevel% EQU 1 goto exam
if %errorlevel% EQU 0 goto test
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt 

ответил 4 фев 2010 в 7:26

John Knoeller's user avatar

Джон Кноллер

4 золотых значка
61 серебряный значок
92 бронзовых знака

См. это пояснение и пример
.

ответил 4 фев 2010 в 7:10

JRL's user avatar

18 золотых значков
98 серебряных значков
145 бронзовых знаков

 setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
**goto :Branch%ERRORLEVEL%**
:Branch0
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:Branch1
echo "exam loop" >> C:\examloop.txt
endlocal 

Aleš's user avatar

8 золотых значков
62 серебряных знака
107 бронзовых знаков

ответил 22 марта 2013 в 22:22

CarFan's user avatar

 setlocal
set /a sample=1
:first
(Type c:\test.txt | find "inserted" >> c:\testloop.txt) || goto :branch1
set /a sample+=1
If %sample% leq 4 goto :first
:brabch1
Echo "exam loop" >> c:\examloop.txt 

Stephan's user avatar

10 золотых значков
58 серебряных значков
91 бронзовый знак

ответил 23 декабря 2017 в 16:38

user9133538's user avatar

Более простой способ использования цикла for.

Для /l %%a в (1,1,4) сделать (

ответил 23 декабря 2017 в 17:13

user9133538's user avatar

Я играл с несколькими IF
и GOTO
команды, но я, кажется, отклоняюсь от своей цели. Я знаю двоих IF
утверждения, которые я в настоящее время использую ниже, являются мусором, но я оставил их в синтаксисе, чтобы передать направление, в котором, по моему мнению, мне следует двигаться.

Я не могу получить IF
утверждения для использования GOTO
команды. Я также не думаю, что полностью понимаю, как должны работать ярлыки.

  @ECHO OFF CLS
:START DEL /q C:\Users\ADMIN\Desktop\temp\*.*
:GETINPUT set /p propkey=Enter the Property Key of pictures to retrieve.: IF EXIST C:\Users\ADMIN\Desktop\photos\*%propkey%_???.jpg GOTO Success IF "%propkey%"=="" ECHO No Property Key was entered. GOTO START
:Success ECHO Pictures from Property Key %propkey% will now be moved to the Temp folder on the Desktop. && PAUSE COPY "C:\Users\ADMIN\Desktop\photos\*%propkey%*.jpg" "C:\Users\ADMIN\Desktop\temp\" START C:\Users\ADMIN\Desktop\temp\
:END 

Mark's user avatar

1 золотой значок
22 серебряных значка
33 бронзовых знака

спросил 11 дек 2013 в 22:47

user3093135's user avatar

 :Start @echo off cls :: store source folder set _sd=C:\Users\ADMIN\Desktop\photos :: store target folder set _td=C:\Users\ADMIN\Desktop\temp
:CheckFolders if not exist %_sd% echo Source folder not found.&goto End if not exist %_td% echo Target folder not found.&goto End :: wipe target folder del /q %_td%\*.*
:GetKey set /p _key=Enter the property key: if '%_key'=='' echo No property key entered. Please retry.&goto GetKey if not exist "%_sd%\*%_key%*.jpg" echo No photos matched the key.&goto End echo Copying pictures to %_td%... copy "%_sd%\*%_key%*.jpg" "%_td%"
:OpenFolder start "%windir%\explorer.exe" "%_td%"
:End 

Метка — это способ произвольного обозначения строки в пакетном файле. Используется GOTO
команда, чтобы изменить обычную последовательность выполнения команды сверху вниз, указав, какая строка должна быть обработана следующей. Как вы, наверное, поняли, используя IF
команды в унисон с GOTO
позволяет выполнять условную обработку, например, когда значения встречаются или возникают ошибки.

Ярлык может использоваться также для документирования или ясности. В моем примере выше “CheckFolders” не используется GOTO
, но позволяет программисту подсказать, что делает этот участок кода.

ответил 11 декабря 2013 в 23:28

Tony's user avatar

2 золотых значка
31 серебряный значок
46 бронзовых знаков

Хотя подстановочные знаки работают в if exist
, есть определенные комбинации, которые могут не сработать. Кроме того, вы должны заключить имя в кавычки, если путь может содержать пробелы. Попробуйте:

 IF EXIST "C:\Users\ADMIN\Desktop\photos\*%propkey%_*.jpg" GOTO Success
IF "%propkey%"=="" ECHO No Property Key was entered. & GOTO START 

ответил 11 декабря 2013 в 23:32

Aacini's user avatar

12 золотых значков
72 серебряных знака
108 бронзовых знаков

  @ECHO OFF CLS
:START DEL /q C:\Users\ADMIN\Desktop\temp\*.*
:GETINPUT set /p propkey=Enter the Property Key of pictures to retrieve.: IF EXIST "C:\Users\ADMIN\Desktop\photos\*%propkey%_???.jpg" GOTO Success IF "%propkey%"=="" ECHO No Property Key was entered. & GOTO GETINPUT goto :EOF
:Success ECHO Pictures from Property Key %propkey% will now be moved to the Temp folder on the Desktop. & PAUSE COPY "C:\Users\ADMIN\Desktop\photos\*%propkey%*.jpg" "C:\Users\ADMIN\Desktop\temp\" start "" "C:\Users\ADMIN\Desktop\temp"
:END 

Magoo's user avatar

8 золотых значков
62 серебряных знака
84 бронзовых знака

ответил 12 декабря 2013 в 0:30

foxidrive's user avatar

10 золотых значков
53 серебряных знака
68 бронзовых знаков

Я пишу файл bat, в котором команда goto оператора if не работает в первом операторе

 :purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):
:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
:end
:ABC
echo purge ABC data !
:DEF
echo purge DEF data !
pause >nul 
 Are you sure you want to Purge DATA ? (Y/N):Y
Are you want to Purge ABC or DEF Data ? (ABC/DEF):ABC
purge ABC data !
purge DEF data ! 
 Are you sure you want to Purge DATA ? (Y/N):Y
Are you want to Purge ABC or DEF Data ? (ABC/DEF):ABC
purge ABC data ! 

спросил 8 сен 2019 в 15:51

Rajesh Nayak's user avatar

Гото меняет точку выполнения на метку. Метка сама по себе не изменит поведение выполнения. Другими словами, после каждой логической единицы в пакетном файле вам нужно изменить поток управления, иначе он просто продолжится со следующей инструкцией.

Например, вы можете изменить свой пример пакетного файла, чтобы он выполнял только один из выбранных результатов, например:

 :purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):
:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
echo Unknown entry
goto :EOF
:ABC
echo purge ABC data !
goto :done
:DEF
echo purge DEF data !
goto :done
:done
pause >nul 

Второй goto :done
строго не требуется, но это хорошая привычка на случай, если в будущем вы добавите больше возможностей веток.

ответил 8 сен 2019 в 16:07

Anon Coward's user avatar

Анон Кауард

3 золотых значка
26 серебряных значков
37 бронзовых знаков

 @echo off
echo Select the data to purge:
echo/
echo 1 ... ABC
echo 2 ... DEF
echo/
%SystemRoot%\System32\choice.exe /C 1ABC2DEF /N /M "Do you want to purge ABC or DEF data?"
echo/
if errorlevel 4 goto DEF
echo Purge ABC data!
goto Done
:DEF
echo Purge DEF data!
:Done
echo/
pause >nul 
  • 1
    , А
    , Б
    , С
    , а
    , б
    , в
    выбрать данные ABC
    или
  • 2
    , Д
    , Э
    , Ж
    , д
    , д
    , ж
    выбрать данные DEF
    или
  • Ctrl+C
    для выхода из пакетной обработки файла после дополнительного подтверждения пользователем.

Каждое второе нажатие клавиши приводит к короткому шуму ошибки, если аудиовыход не отключен и choice
ожидает на одном из ключей, определенных после параметра /C
без учета регистра.

  • choice /?
  • echo /?
  • goto /?
  • if /?
  • pause /?

ответил 8 сен 2019 в 17:54

Mofi's user avatar

17 золотых значков
80 серебряных значков
143 бронзовых знака

Введение

Гото просто. Используя простые операторы goto, вы можете перемещаться в любом месте своего кода. Его также можно использовать для создания функций (показано, как создавать функции).

Синтаксис

  • перейти :Ярлык
  • перейти к ярлыку
  • перейти :EOF

Параметры

Другими словами, если число, которое вставил игрок, равно 1, оно вернется к части кода :Name.

поэтому, если ввод равен 1, вернитесь к строке с :Name

Убедитесь, что если вы используете это слово, оно начинается с Колена (:).

Примеры программ

 echo Hello!
pause >nul
:Name
echo What Is Your Name
set /p Input=Name:
echo so %Input% Is Your Name, right?
echo Rename?
echo 1 For Yes
echo 2 For No
set /p Input=Rename:
if %Input%=1 goto Name 
 @echo off
echo 1 or 2?
set /p input=Choice:
if %input%=1 goto Skip
echo You Chose 1
pause >nul
echo So time for stuff
pause >nul
echo Random Stuf
pause >nul
:Skip
echo So that's it.
pause >nul 

Перейти к переменной

Goto
допускает использование значения переменной в качестве метки для перехода.

 @echo off
echo a = 1
echo b = 2
set /p "foo=Enter option:"
goto %foo% 

Тем не менее, вы должны проверить ввод, чтобы он не попал туда, где его нет. Переход к неопределенной метке мгновенно завершит ваш пакетный скрипт.

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n


гото

\n

Направляет cmd.exe на помеченную строку в пакетной программе. В пакетной программе эта команда направляет обработку команды на строку, обозначенную меткой. Когда метка найдена, обработка продолжается, начиная с команд, начинающихся со следующей строки.

\n


Синтаксис

\n\n


Параметры

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n


Замечания

\n

    \n

  • \n

    Если расширения команд включены (по умолчанию) и вы используете goto
    команда с целевой меткой :EOF
    , вы передаете управление в конец текущего файла пакетного сценария и выходите из файла пакетного сценария без определения метки. Когда вы используете эту команду с :EOF
    метка, вы должны вставить двоеточие перед меткой. Например: goto:EOF
    .

    \n

  • \n

  • \n

    Вы можете использовать пробелы в метке
    параметр, но нельзя включать другие разделители (например, точку с запятой (;) или знак равенства (=)).

    \n

  • \n

  • \n\n
  • \n

  • \n\n
  • \n

\n


Примеры

\n\n

 echo off\nformat a: /s\nif not errorlevel 1 goto end\necho An error occurred during formatting.\n:end\necho End of batch program.\n 

\n


Ссылки по теме

\n\n

Exit a Batch File

В этой статье мы узнаем, что такое использование EXIT
command is и посмотрите несколько примеров, чтобы было легче понять. Мы также видим альтернативный способ завершения скрипта и комбинированный метод.

Используйте команду EXIT для выхода из пакетного файла

EXIT
Команда в основном используется для завершения текущего скрипта.

Общий формат использования EXIT
команда EXIT /B ExitCode
. Здесь, /B
устанавливает параметры конкретных уровней ошибок.

Использовать EXIT /B 0
для обозначения успеха и EXIT /B 1
чтобы указать на ошибку. Давайте посмотрим на пример с его объяснением для лучшего понимания.

  /b 1 

В этом примере мы использовали EXIT
команда с уровнем ошибки 1
. Вывод этого кода показан ниже:

Обратите внимание, что EXIT /B
только закроет текущий запущенный скрипт, но оставит родительский скрипт открытым.

EOF для выхода из пакетного файла

Существует альтернативный способ для той же цели – использование GOTO :EOF
. Давайте посмотрим на пример с этим новым методом.

  

EOF для выхода из пакетного файла

Более того, мы можем объединить EXIT
и GOTO :EOF
в том же сценарии. Давайте посмотрим на пример и его объяснение, чтобы сделать его более понятным.

  /B 1 

В этом примере мы сначала сделали вызов функции GetErrorLevel
с линией CALL :GetErrorLevel
. В функции GetErrorLevel
, мы только что создали EXIT
команда с уровнем ошибки 1
.

Помните, что все обсуждаемые здесь методы написаны с использованием пакетного сценария и будут работать только в среде Windows CMD.

Сценарий хранится в пакетном файле с расширением .bat или .cmd. Хотя .bat более узнаваем, поскольку он использовался в среде MS-DOS, которая предшествовала командной строке, интерпретация командной строки командных файлов сильно отличается от способа интерпретации пакетных файлов DOS, а файлы .cmd интерпретируются только командной строки, поэтому использование расширения .cmd предотвращает неправильное использование в старых средах.

Выполнение начинается с начала файла и заканчивается в конце. Когда достигается конец файла, файл выходит в командную строку, если он был вызван оттуда, или окно консоли закрывается, если он был вызван из проводника Windows или командой START.

 @ЭХО ВЫКЛ. 
 ЭХО. Привет, мир! 

Точка (‘.’) используется для предотвращения путаницы с попыткой включения или выключения вывода вместо включения и выключения отображения ввода и подсказок. Последней строкой кода должно быть:

 ЭХО ВКЛЮЧЕНО 

Пример Hello World

Используя приведенный выше код, мы можем создать программу hello world следующим образом:

 @ЭХО ВЫКЛ.
ЭХО Привет, мир!
ЭХО ВКЛЮЧЕНО 

В пакетных файлах есть два способа написания комментариев. Во-первых, это форма:

 REM Комментарий здесь. 

Эта форма включена в сценарий командного файла MS-DOS. Другая форма такова:

 ::Комментарий здесь. 

Эта форма обычно предпочтительнее из-за более быстрого выполнения и записи, а также из-за того, что ее легко отличить от обычных команд. Для этого типа комментария необходимы только два двойных двоеточия (‘::’), и комментарий заканчивается в конце строки. В пакетных файлах нет многострочных комментариев.

Вы также можете добавить комментарий в конец команды:

 command &::Comment здесь. 

В пакетном сценарии все переменные представляют собой строки, хранящиеся в системной памяти.

Переменные назначаются с помощью команды SET. Назначенные таким образом переменные сохраняются в системной среде вместе с предопределенными глобальными системными переменными до тех пор, пока среда, в которой они определены, не будет прервана либо с помощью команды ENDLOCAL, либо с помощью закрытия сеанса командной строки. Следует проявлять осторожность, чтобы избежать «перезаписи» глобальных переменных среды, таких как «ПУТЬ», «ВРЕМЯ», «ДАТА», поскольку другие программы могут зависеть от их «правильного» значения.

  • Использование команды ‘GOTO :EOF’ в среде, где команда ‘SETLOCAL’ создала дочернюю среду, подразумевает и приводит к команде ‘ENDLOCAL’.
 НАБОР имя=Джон Смит 
 НАБОР "имя=Джон Смит" 

Переменные обычно используются в других командах путем расширения строки ссылки символами ‘%’, отмечающими начало и конец строки ссылки на переменную:

 ЭХО %name% 

Пример, демонстрирующий возникшую проблему:

 @Эхо выключено
Установите «количество = 0»
Для /L %%n в (1 1 3)Do ( Установить /количество+=1 Эхо %количество%
)
Эхо %количество% 
 0
0
0
3 

Есть 2 способа решить эту проблему. Первый и наиболее часто используемый — включить отложенное расширение, которое позволяет расширять переменные с помощью ‘!’ (отложенное) расширение:

 @Эхо выключено
Установите «количество = 0»
SETLOCAL EnableExtensions EnableDelayedExpansion
Для /L %%n в (1 1 3)Do ( Установить /количество+=1 Эхо !считай!
)
Эхо %количество% 
 1
2
3
3 

Использование отложенного расширения приводит к тому, что переменная расширяется во время выполнения, а не при первоначальном анализе команды интерпретатором.

 @Эхо выключено
Установите «количество = 0»
Для /L %%n в (1 1 5)Do ( Установить /количество+=1 Вызов Echo %%count%%
)
Эхо %количество% 

Использование отложенного расширения позволяет определять «связанные» переменные с использованием общего ссылочного имени с уникальными индексами для имитации массивов.
Это возможно, поскольку при включенном отложенном расширении расширение переменных происходит в два этапа. Сначала раскрываются переменные ‘%’, затем ‘!’ переменные расширяются. Пример:

 @Эхо выключено Установите "str[1]=один,три,пять" Установите "str[2]=два, четыре, шесть" Setlocal EnableExtensions EnableDelayedExpansion
рем для каждого в 1 2 Для %%i в (1 2)Do (
rem сбросить переменную подиндекса Установите "{i}=0"
rem для каждой переменной str[index] Для %%G в (!str[%%i]!)Do (
rem увеличить счетчик субиндексов Установить /A {i}+=1
rem определить элемент '{i}' от str[index] до str[index][subindex] Установите "str[%%i][!{i}!]=%%G" ) )
Установить ул.
Гото: Эоф 
 ул[1]=один,три,пять
ул[1][1]=один
ул[1][2]=три
ул[1][3]=пять
ул[2]=два,четыре,шесть
ул[2][1]=два
ул[2][2]=четыре
ул[2][3]=шесть 

Команда set также может использоваться для ввода:

 SET /P var=Введите значение для var: 
 НАБОР вар=
SET /P var=Введите значение для var: 

Ниже приведен пример:

 @ЭХО ВЫКЛ.
SET /P answer= Введите имя файла для удаления:
ДЕЛ /P %ответ%
ЭХО ВКЛЮЧЕНО 

Команда IF может использоваться для создания программной логики в пакетных файлах. Команда IF позволяет выполнять три основные проверки: уровень ERRORLEVEL, равенство двух строк и наличие файла или папки. Первая проверка ERRORLEVEL проверит, больше ли он определенного числа или равен ему:

 ЕСЛИ УРОВЕНЬ ОШИБКИ 5 ЭХО. УРОВЕНЬ ОШИБКИ не менее 5. 

Для этого стиля первым параметром всегда является ERRORLEVEL, а вторым является значение, по которому он проверяется. В этом случае, если ERRORLEVEL не меньше 5, выполняется команда в конце строки, выводящая сообщение «ERRORLEVEL не ниже 5.». Вторая форма — это проверка между двумя строками:

 ЕСЛИ "%str1%"=="Привет." ЭХО. Строки равны. 
 IF /I "%str1%"=="Привет." ЭХО. Строки равны. 

Теперь, например, str1 может содержать «HELLO». но проверка все равно приведет к выполнению команды в конце, поскольку проверка теперь нечувствительна к регистру. Последний базовый тип IF — это проверка существования, чтобы увидеть, существует ли файл или папка.

 ЕСЛИ СУЩЕСТВУЕТ myfile.txt, ВПИШИТЕ myfile.txt 

Здесь, если файл “myfile.txt” существует в текущей папке, то команда TYPE myfile.txt
выполняется, что отображает содержимое “myfile.txt” в окне консоли.

Во всех предыдущих примерах есть необязательный параметр НЕ, который может быть записан после IF, который будет выполнять команду в конце строки, если условие не
истинный. Например:

 ЕСЛИ НЕ СУЩЕСТВУЕТ myfile.txt ECHO. Файл отсутствует. 

Что выведет «Файл отсутствует». если файл “myfile.txt” не существует в текущей папке. Есть несколько других типов IF с расширениями команд, которые можно увидеть с помощью IF /?
команду в командной строке.

Оператор ELSE может использоваться с комбинацией квадратных скобок для предоставления многострочных логических операторов, предоставляющих альтернативный набор команд, если условие не выполняется.

 ЕСЛИ условие ( команды, которые должны быть выполнены, если условие истинно
) ЕЩЕ ( команды, которые должны быть выполнены, если условие ложно
) 

В отличие от некоторых языков, в пакетных файлах сценарии требуют, чтобы строки IF condition (
, ) ELSE (
и )
написаны очень конкретно, как это. Однако его можно переписать, чтобы использовать однострочные результаты в одной строке:

 IF условие (команда, если истина) ELSE команда, если ложь 

Ниже приведен пример использования оператора ELSE:

 @ЭХО ВЫКЛ.
:: Запрашивать ввод.
SET /P answer=Введите имя файла для удаления:
ЕСЛИ СУЩЕСТВУЕТ %ответ% ( ДЕЛ /P %ответ%
) ЕЩЕ ( ЭХО. ОШИБКА: %answer% не может быть найден в этой папке!
)
ЭХО ВКЛЮЧЕНО 

Этот пакетный файл удалит файл, если он не существует, и в этом случае он сообщит вам сообщением «ОШИБКА: %answer% не может быть найден в этой папке!».

Вы можете управлять ходом программы с помощью оператора GOTO. Пакетные файлы не содержат всех элементов для сценариев структурированного программирования, однако некоторые элементы структурированного программирования, такие как функции, можно моделировать. Однако самым простым способом управления ходом программы является оператор GOTO, который переходит к указанной метке.

 GOTO labelname 

Этот код направит программу к метке labelname, которая находится при первом появлении этой строки:

 

Важно помнить, что метки содержат только 8 символов, поэтому, если метка длиннее 8 символов, будут видны только первые 8 символов. Это означает, что метки labelname1 и labelname2 нельзя отличить друг от друга, так как их единственная разница возникает после первых 8 символов. Хотя это и не совсем неправильно, лучше избегать использования имен меток длиннее 8 символов, чтобы легко избежать этих проблем с различением.

Вот пример из более раннего переработанного цикла, пока его не попросят остановиться:

 @ЭХО ВЫКЛ.
:быстрый
::Очистить значение готового к использованию ответа.
УСТАНОВИТЬ ответ =
SET /P answer=Введите имя файла для удаления (q для выхода):
ЕСЛИ СУЩЕСТВУЕТ %ответ% ( ДЕЛ /P %ответ% GOTO подсказка
)
ЕСЛИ /I "%answer%"=="q" ПЕРЕЙТИ :EOF
:: К этому моменту должна была произойти ошибка, так как все
::правильные записи уже обработаны.
ЭХО. ОШИБКА: Неправильный ввод!
GOTO подсказка
ЭХО ВКЛЮЧЕНО 

Принять к сведению команду GOTO :EOF
. Эта команда переместит сценарий в конец файла и завершит текущий пакетный сценарий.

Запускает указанную команду для каждого файла в наборе файлов.

 FOR %variable IN (set) DO command [параметры команды] 
 %variable Определяет однобуквенный заменяемый параметр. (set) Определяет набор из одного или нескольких файлов. Можно использовать подстановочные знаки. command Задает команду, которую необходимо выполнить для каждого файла. параметры команды Задает параметры или переключатели для указанной команды. 

Чтобы использовать команду FOR в пакетной программе, укажите вместо нее %%variable.
из %переменной. Имена переменных чувствительны к регистру, поэтому %i отличается
из %I.

Пример пакетного файла:

 для %%F IN (*.txt) DO @echo %%F 

Эта команда выведет список всех файлов, оканчивающихся на .txt, в текущем каталоге.

 FOR /D %variable IN (set) DO command [параметры команды] 

Если набор содержит подстановочные знаки, то указывает, что он соответствует каталогу.
имена вместо имен файлов.

 FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры команды] 
 FOR /L %переменная IN (начало, шаг, конец) DO команда [параметры команды] 

Набор представляет собой последовательность чисел от начала до конца, по шагам.
Таким образом, (1,1,5) будет генерировать последовательность 1 2 3 4 5, а (5,-1,1) будет
сгенерировать последовательность (5 4 3 2 1)

 FOR /F ["параметры"] %переменная IN (набор файлов) DO команда [параметры команды] FOR /F ["параметры"] %переменная IN ("строка") DO команда [параметры команды] FOR /F ["параметры"] %переменная IN ("команда") DO команда [параметры команды] 

или, если присутствует опция usebackq (или useback):

 FOR /F ["параметры"] %переменная IN ("набор файлов") DO команда [команда-параметры] FOR /F ["параметры"] %переменная IN ("строка") DO команда [параметры команды] FOR /F ["параметры"] %переменная IN (`команда`) DO команда [параметры команды] 

(Цель usebackq — использовать полное имя набора файлов, включая пробел.)

набор имен файлов — это одно или несколько имен файлов. Каждый файл открывается, читается
и обрабатывается перед переходом к следующему файлу в наборе имен файлов.
Обработка заключается в чтении файла, разбиении его на
отдельные строки текста, а затем анализ каждой строки на ноль или
больше токенов. Затем вызывается тело цикла for с параметром
значение(я) переменной установлено в найденную строку(и) токена. По умолчанию /F
передает первый разделенный пробелом токен из каждой строки каждого файла.
Пустые строки пропускаются. Вы можете переопределить синтаксический анализ по умолчанию
поведение, указав необязательный параметр «options». Этот
строка в кавычках, содержащая одно или несколько ключевых слов для указания
различные варианты разбора. Ключевые слова:

 eol=c - указывает символ конца строки комментария (только один) skip=n - указывает количество строк, которые необходимо пропустить при начало файла. delims=xxx — указывает набор разделителей. Это заменяет набор разделителей по умолчанию из пробела и табуляции. tokens=x,y,m-n — указывает, какие токены из каждой строки передаваться в тело for для каждой итерации. Это приведет к тому, что дополнительные имена переменных будут выделяться. Форма m-n представляет собой диапазон, с указанием токенов с m-го по n-й. Если последний символ в строке tokens= является звездочка, то дополнительная переменная выделенный и получает оставшийся текст на строка после последнего проанализированного токена. usebackq — указывает, что действует новая семантика, где строка в обратных кавычках выполняется как команда, а строка в одинарных кавычках является литеральная строковая команда и позволяет использовать двойные кавычки для цитирования имен файлов в набор имен файлов. 

Некоторые примеры могут помочь:

 FOR /F "eol=; tokens=2,3* delims=, " %i в (myfile.txt) do @echo %i %j %k 

будет анализировать каждую строку в myfile.txt, игнорируя строки, начинающиеся с
точку с запятой, передавая 2-й и 3-й токен из каждой строки в for
body с токенами, разделенными запятыми и/или пробелами. Обратите внимание на
Операторы body ссылаются на %i для получения второго токена, на %j для получения
3-й токен и %k, чтобы получить все оставшиеся токены после 3-го. Для
имена файлов, содержащие пробелы, необходимо заключать имена файлов в кавычки с
двойные кавычки. Чтобы использовать двойные кавычки таким образом, вы также
необходимо использовать опцию usebackq, иначе будут двойные кавычки
интерпретируется как определение буквальной строки для анализа.

%i явно объявлен в операторе for, а %j и %k
неявно объявляются с помощью параметра tokens=. Вы можете указать до
до 26 токенов через строку tokens=, при условии, что это не вызывает
попытка объявить переменную выше буквы ‘z’ или ‘Z’.
Помните, переменные FOR состоят из одной буквы, чувствительны к регистру, глобальны,
и у вас не может быть более 52 активных одновременно.

Вы также можете использовать логику синтаксического анализа FOR /F для непосредственной строки,
создание набора имен файлов между скобками в виде строки в кавычках,
с использованием одинарных кавычек. Это будет рассматриваться как одна строка
ввода из файла и проанализированы.

 FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i 

будет перечислять имена переменных среды в текущем
среда.

  %~I — расширяет %I, удаляя все окружающие кавычки (") %~fI — расширяет %I до полного имени пути %~dI — расширяет %I только до буквы диска %~pI - расширяет %I только до пути %~nI - расширяет %I только до имени файла %~xI - расширяет %I только до расширения файла %~sI - расширенный путь содержит только короткие имена %~aI - расширяет %I до файловых атрибутов файла %~tI - расширяет %I до даты/времени файла %~zI - расширяет %I до размера файла %~$PATH:I - ищет каталоги, указанные в PATH переменная окружения и расширяет %I до полное имя первого найденного. Если имя переменной среды не определено или файл не найден поиск, то этот модификатор расширяется до пустая строка 

Модификаторы можно комбинировать для получения сложных результатов:

  %~dpI — заменяет %I только на букву диска и путь %~nxI - расширяет %I только до имени файла и расширения %~fsI - расширяет %I до полного имени пути только с короткими именами %~dp$PATH:I - ищет каталоги, указанные в PATH переменная среды для %I и расширяется до буква диска и путь к первому найденному. %~ftzaI - расширяет %I до DIR-подобной строки вывода 

В приведенных выше примерах %I и PATH можно заменить другими допустимыми
ценности. Синтаксис %~ завершается допустимым именем переменной FOR.
Выбор имен переменных в верхнем регистре, таких как %I, делает их более читабельными и
позволяет избежать путаницы с модификаторами, которые не чувствительны к регистру.

в основном используется для перенаправления вывода одной программы в другую программу.

 а | б 

означает выполнение «а» и то, что все выходные данные «а» дают
консоль – укажите это как ввод “b” s

 реж | найти ".htm" 

выдаст список файлов, имена которых содержат “.htm”

Вывод команды, а также возможные ошибки могут быть перенаправлены также в файлы (обратите внимание на 2 перед >> ):

 ACommand >>TheOutputOfTheCommandLogFile.log 2>>TheErrorOutputOfTheCommandFile.log 
  • Код, обозначенный меткой, можно перейти с помощью встроенной команды GOTO
  • Использование встроенной команды CALL с меткой создает новый вызов командного процессора для того же скрипта с неявным переходом к метке
  • Использование выражения GOTO :EOF закрывает текущий вызов командного процессора (То же, что и EXIT /B, за исключением того, что последний позволяет указать УРОВЕНЬ ОШИБКИ)

Структура вызова подпрограммы выглядит так:

 ВЫЗОВ :подпрограмма1 параметр1 параметр2 .
ECHO %result% был возвращен из подпрограммы1
ВЫЗОВ :подпрограмма2 параметр1 параметр2 .
ECHO %result% был возвращен из подпрограммы2
ПЕРЕЙТИ: EOF
REM Вышеприведенная строка завершает основной вызов командного процессора и закрывает скрипт.
:подпрограмма1 SETLOCAL команды с параметрами %1, %2, . и установка %retval% ENDLOCAL & SET result=%retval% ПЕРЕЙТИ:EOF REM Приведенная выше строка завершает дочерний вызов командного процессора и, таким образом, возвращается сразу после CALL подпрограммы1 в основном сценарии.
:подпрограмма2 SETLOCAL команды с параметрами %1, %2, . и установка %retval% ENDLOCAL & SET result=%retval% ПЕРЕЙТИ:EOF REM Приведенная выше строка завершает дочерний вызов командного процессора и, таким образом, возвращается сразу после подпрограммы CALL2 в основном сценарии. 

Bat-файл со следующим содержимым выводит «42» в результате выполнения

 :: описывает и вызывает функцию умножения с двумя аргументами
@ЭХО ВЫКЛ.
ЗВОНОК: умножить 21 2
ЭХО%результат%
: умножить
SETLOCAL
установить ретвал = 0
установить слева =% 1
установить правильно =% 2
:: используйте '/A' для арифметики
установить /A "retval=левый*правый"
ENDLOCAL & SET result=%retval%
ПЕРЕЙТИ: EOF 
  • Использование CALL с меткой или выражением CALL :EOF или EXIT /B требует включения расширений команд.
  • Метка — это строка, состоящая из допустимого имени (не содержащего никаких разделителей, таких как пробел или точка с запятой), перед которым ставится двоеточие.
 C:\>myprogram.exe 

И это запустит исполняемый файл myprogram. Теперь предположим, что мы хотим передать несколько аргументов этой программе:

 C:\>моя программа arg1 arg2 arg3 

Теперь, если мы перейдем к стандартной функции main, у нас будут значения argc и argv:

 int main(int argc, char *argv[]) 
 argc = 4
argv[0] = "myprogram" (название программы - вычтите 1 из argc, чтобы получить количество аргументов)
аргв[1] = "арг1"
аргв[2] = "арг2"
аргв[3] = "арг3" 

Это не должно стать большим сюрпризом для людей, хоть немного знакомых со стандартным программированием на C. Однако, если мы переведем это в нашу функцию WinMain, мы получим другое значение:

 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR CmdLine, int iCmdShow) 

у нас будет только одно значение для принятия командной строки:

 CmdLine = "myprogram arg1 arg2 arg3". 

Мы также можем использовать функцию GetCommandLine
чтобы получить эту строку из любой точки приложения. Если мы хотим преобразовать это в стандартную пару argv/argc, мы можем использовать функцию CommandLineToArgvW
для выполнения конвертации. Важно отметить, что CommandLineToArgvW работает только со строками Unicode.

Когда мы возвращаем значение из нашей программы на C, это значение передается в оболочку CMD и сохраняется в переменной с именем «ERRORLEVEL». E RRORLEVEL — единственная глобальная переменная, которая не является строкой и может содержать число от 0 до 255. По соглашению нулевое значение означает «успех», а значение, отличное от нуля, означает ошибку.

Допустим, мы хотим написать программу на C, которая возвращает количество переданных ей аргументов. Это может показаться простой задачей в C, но ее трудно выполнить в пакетном сценарии:

 int main(int argc, char *argv[])
{ возврат (аргумент - 1);
} 

И назовем эту программу “CountArgs.exe”. Теперь мы можем поместить это в пакетный скрипт, передать ему ряд аргументов и распечатать переданное число:

 countargs.exe %*
ЭХО %ERRORLEVEL% 

Мы можем, в свою очередь, назвать этот скрипт “count.bat” и запустить его из командной строки:

 C:\>count.bat arg1 arg2 arg3 

и выполнив это, вы получите ответ: 3.

ПРИМЕЧАНИЕ. На самом деле это можно сделать с помощью пакетного файла, не прибегая к программе на C, просто используя расширение переменной с задержкой CMD через параметр «/V:ON»:

 /V:ON Включить отложенное раскрытие переменной среды с помощью ! как
разделитель. Например, /V:ON позволит использовать !var! чтобы расширить переменную
var во время выполнения. Синтаксис var расширяет переменные во время ввода,
что совсем другое, когда внутри цикла FOR. 
 установить COUNT=0
для %%x в (%*) сделать ( установить /A COUNT=!COUNT!+1 )
эхо %COUNT% 
 установить COUNT=0
для %%x в (%*) установите /A COUNT+=1
Эхо СЧЕТЧИК = %COUNT% 

Это возвращает тот же ответ, что и пример программы C.

В этой книге описывается и показывается, как использовать предоставленный Microsoft командный интерпретатор cmd.exe и связанные с ним команды, а также как писать пакетные сценарии Windows для интерпретатора. cmd.exe является интерпретатором по умолчанию во всех операционных системах на базе Windows NT, включая Windows XP, Windows 7 и Windows 10.

В этой книге рассматриваются 32-разрядные команды Windows, применимые к современным версиям Windows, основанным на среде Windows NT. В нем не рассматриваются команды, специфичные для сред DOS и операционных систем на базе DOS, таких как Windows 95, Windows 98 и Windows Me, чьи интерпретаторы команд, поставляемые Microsoft, на самом деле являются программами DOS, а не программами Win32.

Узнать, какая версия Windows у вас установлена, можно с помощью VER
команда.

Тема этой книги также известна как “пакетное программирование”, хотя “пакетное” относится не только к пакетным файлам для MS DOS и командного интерпретатора Windows. Другие предметные термины включают «программирование пакетных файлов», «скрипты пакетных файлов», «пакетную команду Windows», «пакетный файл Windows», «командную строку Windows», «командную строку Windows» и «скрипты оболочки Windows».

Для сценариев Windows cmd.exe является устаревшей технологией; современным эквивалентом является PowerShell, основанный на . NET и чьи потоки для конвейеров являются объектами, а не символьными (байтовыми) потоками. Возможности PowerShell значительно превосходят возможности cmd.exe; PowerShell обладает возможностями полного языка программирования, включая типизированное содержимое переменных, арифметику с плавающей запятой, большие целые числа, программирование с графическим интерфейсом через . NET-классы и т. д. Тем не менее, cmd.exe по-прежнему полезен для простых сценариев и задач взаимодействия с командной строкой, часто предлагая более короткий синтаксис и более быстрое время запуска, а также работая с конвейерной обработкой потока символов, знакомой по другим операционным системам. cmd.exe может быть дополнен командами, известными из других операционных систем; см. Команды #Unix
. Другой альтернативой для сценариев Windows является популярный Python с его библиотеками pywin32 и wmi; однако для этого требуется установка.

Все эти команды встроены в интерпретатор команд и не могут быть изменены. Иногда это происходит потому, что им требуется доступ к внутренним структурам данных интерпретатора команд или изменение свойств самого процесса интерпретатора команд.

Связывает расширение с типом файла (FTYPE), выводит существующие ассоциации или удаляет связь. См. также FTYPE
.

  • доц.
    • Список всех ассоциаций в формате “=”, как, например, “.pl=Perl” или “.xls=Excel.Sheet.8”.
  • доц. | найти “.doc”
    • Список всех ассоциаций, содержащих подстроку “.doc”.

В версиях Windows на базе Windows NT ничего не делает; сохранено для совместимости с MS DOS.

  • перерыв > пустой.txt
    • Создает пустой файл или очищает содержимое существующего файла, используя тот факт, что break ничего не делает и не имеет вывода. Короче печатать, чем “введите nul > empty.txt”.

Вызывает одну пакетную программу из другой, вызывает подпрограмму внутри одной пакетной программы или, как недокументированное поведение, запускает программу. В частности, приостанавливает выполнение вызывающего объекта, запускает выполнение вызываемого объекта и возобновляет выполнение вызывающего объекта, если и когда вызываемый объект завершает выполнение.

О вызове подпрограммы см. Функции
раздел.

Помните, что вызов пакетной программы из пакета без использования вызова
ключевое слово приводит к тому, что выполнение никогда не возвращается к вызывающему объекту после завершения вызываемого объекта.

Вызываемый объект наследует переменные среды вызывающего объекта, и если вызываемый объект не препятствует этому с помощью SETLOCAL
, изменения, внесенные вызываемым объектом в переменные среды, становятся видимыми вызывающему объекту после возобновления выполнения.

  • mybatch.bat
    • При использовании в пакете управление передается mybatch.bat и никогда не возобновляет выполнение вызывающей программы.
  • вызвать mybatch.bat
  • позвоните в мою группу
  • вызвать mybatch.bat arg1 “arg 2”
  • звонок: mylabel
  • call :mylabel arg1 “arg 2”
  • cmd /c mybatch.bat
    • Аналогично вызову, но возобновляет выполнение даже при наличии ошибок. Кроме того, любые изменения, которые вызываемый объект вносит в переменные среды, не распространяются на вызывающий объект.
  • вызвать notepad.exe
    • Запускает Блокнот, или вообще любой другой исполняемый файл. По-видимому, это не предполагаемое использование вызова и официально не задокументировано.

См. также Функции
, ЦМД
амд СТАРТ
.

Переход в другой каталог или вывод текущего каталога. Однако, если используется другая буква диска, он не переключается на этот другой диск или том.

Синоним CD
.

Очищает экран.

Устанавливает цвета переднего плана и фона консоли.

  • цвет f9
  • Используйте белый фон и синий передний план.

     

    цвет

     Восстановить исходную настройку цвета. 

 

Копирует файлы. См. также

 ПЕРЕМЕЩЕНИЕ 

,

КОПИЯ
 и 

РОБОКОПИЯ

  • .

  • файла File.txt

     

    del /s *.txt

     Рекурсивно удаляет файлы, включая вложенные каталоги, но сохраняет каталоги; безжалостно удаляет все подходящие файлы, не спрашивая подтверждения. 

      del /p /s *.txt

    • То же, что и выше, но запрашивает подтверждение перед каждым файлом.

    del /q *.txt

     

    Удаляет без подтверждения.

    Получение даты в формате iso, например "2000-01-28": Это не так просто, так как формат даты зависит от настроек страны.

    • Если вы можете принять формат «28.01.2000 пн», то подойдет следующее:
      • set isodate=%date:~10,4%-%date:~4,2%-%date:~7,2%
    • Если у вас WMIC
      , следующее не зависит от языкового стандарта:

      • for /f %i in ('wmic os get LocalDateTime') do @if %i lss a if %i gtr 0 set localdt=%i
        установить isodate=%localdt:~0,4%-%localdt:~4,2%-%localdt:~6,2%
      • Чтобы использовать вышеуказанное в пакете, превратите %i в %%i и удалите @ перед if.
    • Если у вас установлен Perl:
      • for /f %i in ('perl -MPOSIX -le "print strftime '%Y-%m-%d', localtime"') do @set isodate=%i

    Отображение строки без новой строки требует хитрости:

    • установить <NUL /p=Вывод команды:
      • Выводит "Вывод команды:". Вывод следующей команды будет отображаться сразу после ":".
    • установить <NUL /p=Текущее время: & время /t
      • Выводит «Текущее время:», за которым следует вывод «время /t».
    • (установить tmp.txt
      • Как и раньше, с перенаправлением вывода обеих команд в файл.

     если существует файл.txt ( эхо Файл существует.
    ) еще ( эхо Файл не существует.
    ) 

    См. также ЕСЛИ
    .

    Завершает локальный набор переменных среды, начатый с помощью SETLOCAL
    . Может использоваться для создания подпрограмм: см. Функции
    .

    Синоним DEL
    .

    Выход из консоли DOS или, с помощью /b, только текущий запущенный пакет или выполняемая в данный момент подпрограмма. При использовании без /b в пакетном файле консоль DOS, вызывающая пакет, закрывается.

    • выход
    • выход /b

    Перебирает ряд значений, выполняя команду. Ключевые слова: петля.

    Примеры без переключателей и с переключателями /r и /d:

    Примеры переключателя /l:

    Примеры с ключом /f:

    Примеры перенаправления:

    • (для %i в (1,2,3) сделать @echo %i) > anyoldtemp.txt
      • Чтобы перенаправить весь результат цикла for, перед перенаправлением поместите весь цикл в скобки. В противном случае перенаправление будет привязано к телу цикла, поэтому каждая новая итерация тела цикла будет переопределять результаты предыдущих итераций.
    • для %i в (1,2,3) сделать @echo %i > anyoldtemp.txt
      • Пример, связанный с предыдущим. Он показывает последствия того, что цикл не заключен в скобки.
     for %%i в (a b c) do call :for_body %%i
    выход / б
    :для_тела эхо 1 %1 перейти: продолжение эхо 2 %1 : продолжение
    выход /b 

     для %%i в (a b c) делать ( эхо 1 %%i перейти: продолжение эхо 2 %%i : продолжение эхо 3 %%i
    ) 

    Выводит или устанавливает команду для выполнения для типа файла. См. также ASSOC
    .

  • Список всех ассоциаций выполняемых команд с типами файлов, например, ‘Perl=”C:\Perl\bin\perl.exe” “%1” %*’
  •  найти "Excel. Лист" 

    Выводит список только ассоциаций, строка отображения которых содержит «Excel. Sheet»

     

     

    Идет к лейблу.

     

    перейти :mylabel
    эхо Привет 1
    REM Hello 1 никогда не печатается.

    :мой лейбл
    эхо привет 2
    перейти: eof

    эхо привет 3
    REM Hello 3 никогда не печатается. Eof — это виртуальная метка, обозначающая конец файла.

     

    Goto внутри тела цикла for заставляет cmd забыть о цикле, даже если метка находится в том же теле цикла.

     

    Условно выполняет команду. Документация доступна при вводе IF /? к подсказке CMD.

    Доступные элементарные тесты:

    • существует
    • ==
    • equ -- равно
    • neq -- не равно
    • lss -- меньше чем
    • leq -- меньше или равно
    • gtr -- больше, чем
    • geq -- больше или равно
    • определенная
    • уровень ошибки
    • cmdextversion

    К каждому элементарному тесту можно применить «не». Видимо нет операторов типа И, ИЛИ и т.п. для объединения элементарных тестов.

    Переключатель /I заставляет сравнения == и equ игнорировать регистр.

     если не существует %targetpath% ( эхо Целевой путь не найден. выход / б
    ) 

    Создает новый каталог или каталоги. Имеет синоним MKDIR
    ; см. также его антоним RD
    .

    • мд Реж.
      • Создает один каталог в текущем каталоге.
    • md Dir1 Dir2
      • Создает два каталога в текущем каталоге.
    • md "Мой каталог с пробелами"
      • Создает каталог с именем, содержащим пробелы в текущем каталоге.

    Синоним MD
    .

    Создает символическую ссылку или ссылку другого типа. Доступно начиная с Windows Vista.

    Перемещает файлы или каталоги между каталогами или переименовывает их. См. также РЕН
    .

    • переместить Файл1.txt Файл2.txt
      • Переименовывает File1.txt в File2.txt, перезаписывая File2.txt, если это подтверждено пользователем или запущено из пакетного сценария.
    • переместить File.txt Dir
      • Перемещает файл File.txt в каталог Dir, предполагая, что File.txt — это файл, а Dir — это каталог; перезаписывает целевой файл Dir\a.txt, если выполняются условия для перезаписи.
    • двигаться Dir1 Dir2
      • Переименовывает каталог Dir1 в Dir2, предполагая, что Dir1 является каталогом, а Dir2 не существует.
    • двигаться Dir1 Dir2
      • Перемещает каталог Dir1 в Dir2, что приводит к существованию Dir2\Dir1, предполагая, что и Dir1, и Dir2 являются существующими каталогами.
    • переместить F:\File.txt
      • Перемещает файл в текущий каталог.
    • переместить F:\*.txt
      • Перемещает файлы, расположенные в F:\ и оканчивающиеся на точку txt, в текущий каталог, при условии, что текущий каталог не F:\.

    Выводит или устанавливает значение переменной среды PATH. При выводе включает "PATH=" в начале вывода.

    • путь
      • Выводит ПУТЬ. Пример вывода:
        • ПУТЬ=C:\Windows\system32;C:\Windows;C:\Program Files\Python27
    • путь C:\Users\Joe Hoe\Scripts;%path%
      • Расширяет путь с C:\Users\Joe Hoe\Scripts, применяя только к процессу cmd.exe.
    • путь ;
      • Очищает путь.
    • эхо %путь% | perl -pe "s/;/\n/g" | Сортировать
      • Показывает отсортированные по пути папки, если у вас установлен perl.
     

     Изменения диска и каталога извлечены из стека каталогов. Стек каталогов заполняется с помощью 

    PUSHD

    команда.
     

    Может использоваться для изменения или сброса командной строки cmd.exe. Он устанавливает значение переменной среды PROMPT.

  • C:\>ПРОМТ MyPrompt$G

    Моя подсказка> компакт-диск
    С:\

    Моя подсказка > ПОДСКАЗКА

    С:\>

  •  Команда PROMPT используется для установки приглашения на «MyPrompt>». На компакт-диске показано, что текущий путь к каталогу — «C:\». Использование PROMPT без каких-либо параметров возвращает приглашение к пути к каталогу. 

     Помещает текущий каталог в стек каталогов, делая его доступным для 

    POPD

    команда для извлечения и, если она выполняется с аргументом, переходит в каталог, указанный в качестве аргумента.
     

    Удаляет каталоги. См. также его синоним RMDIR
    и антоним MD
    . По умолчанию можно удалить только пустые каталоги. Также введите «rd /?».

    • rd Dir1
    • rd Dir1 Dir2
    • р-д "Мой режиссёр с пробелами"
    • rd /s Dir1
    • rd /q /s Dir1
      • То же, что и выше, но без запроса подтверждения.

    Переименовывает файлы и каталоги.

    • ren filewithtpyo.txt filewithtypo.txt
    • рен *.cxx *.cpp

    Это синоним REN
    команда.

    Используется для примечаний в пакетных файлах, предотвращая выполнение содержимого примечания.

     REM Замечание, которое не выполняется
    echo Hello REM Это замечание отображается с помощью echo
    echo Hello & REM Это замечание игнорируется по желанию
    :: Это предложение помечено двойным двоеточием как примечание. 

    БДМ обычно ставится в начале строки. Если она помещена за командой, она не работает, если только перед ней не стоит амперсанд, как показано в примере выше.

    Двойное двоеточие является альтернативой БДГ. Это может вызвать проблемы при использовании в середине последовательностей в круглых скобках, например, используемых в FOR
    петли. Двойное двоеточие кажется просто уловкой, ярлыком, начинающимся с двоеточия.

    Это синоним RD
    .

    При использовании в пакетном файле все дальнейшие изменения переменных среды делаются локальными для текущего пакетного файла. При использовании вне пакетного файла ничего не делает. Можно закончить с помощью ENDLOCAL
    . Выход из пакетного файла автоматически вызывает «конец локального». Может использоваться для создания подпрограмм: см. Функции
    .

    Кроме того, может использоваться для включения отложенного расширения
    вот так: «setlocal EnableDelayedExpansion». Отложенное расширение заключается в том, что имена переменных, заключенные в восклицательные знаки, заменяются их значениями только после того, как выполнение достигает места их использования, а не в более ранней точке.

     @echo off
    звонок :myhead 2 File.txt
    выход / б
    :: Функция моя голова
    :: ===============
    :: %1 - количество строк, %2 - имя файла
    :моя голова
    setlocal EnableDelayedExpansion
    установить счетчик=1
    for /f "tokens=*" %%i in (%2) do ( эхо %%i установить /a counter=!counter!+1 если !счетчик! гтп %1 выход /b
    )
    выход /b 

    Сдвигает аргументы пакетного файла, но не влияет на %*. Таким образом, если %1=Hello 1, %2=Hello 2 и %3=Hello 3, то после SHIFT %1=Hello 2 и %2=Hello 3, но %* равно "Hello 1" "Hello 2" "Здравствуйте 3".

    Запускает программу в новом окне или открывает документ. Использует неясный алгоритм, чтобы определить, является ли первый переданный аргумент заголовком окна или программой, которую нужно выполнить; гипотеза: он использует наличие кавычек вокруг первого аргумента как намек на то, что это заголовок окна.

    Выводит или устанавливает системное время. См. также #ДАТА
    и переменная TIME в #Специальные имена переменных
    .

    • время /t
      • Выводит системное время в формате ЧЧ:ММ, без секунд и миллисекунд. Пример вывода: 09:19.
    • раз
      • Выводит системное время в формате, зависящем от локали, возможно, с указанием секунд и сотых долей секунды, и запрашивает установку нового времени; времени предшествует сообщение для конкретной локали, обычно перевод «Текущее время:». Таким образом, выходной формат отличается от формата "время /t".
    • эхо %time%
      • Выводит текущее время, используя специальную переменную TIME, в формате, зависящем от локали, включая часы, минуты, секунды и, возможно, сотые доли секунды. Пример вывода для одной локали: 9:19:31,55.
    • echo %time% & timeout 1 >nul & echo,|время
      • Выводит время до и после команды в середине, здесь timeout 1. Может использоваться для измерения времени выполнения последовательности в середине; ключевые слова: сколько времени это займет.

    Устанавливает заголовок, отображаемый в окне консоли.

    Печатает содержимое файла или файлов на выходе.

    • тип filename.txt
    • введите a.txt b.txt
    • тип *.txt
    • введите NUL > tmp.txt
      • Создать пустой файл (blank file).

    Показывает версию командного процессора или операционной системы.

      С:\>ВЕР
    Microsoft Windows XP [версия 5.1.2600]
    С:\> 

    Некоторые версии строк:

    • Microsoft Windows [Версия 5.1.2600]
      • Для Windows XP
    • Microsoft Windows [Версия 6.0.6000]
      • Для Windows Vista
    • .

    Слово «версия» появляется локализовано.

    Устанавливает или сбрасывает настройку для проверки правильности записи файлов COPY и т. д.

    Выводит метки тома.

    :/>  Как узнать свой порт, посмотреть номер или определить открытые порты компьютера или IP-адреса в сети или интернете в Windows 7, 8, 10