Выполнить скрипт в командной строке windows

How to Write a CMD Script. A CMD script allows you to perform multiple Windows operations just by double-clicking the CMD script file. The operations that you want the CMD file to perform are entirely up to you, making these file types very useful in a business environment. You can make a CMD script using any text ...

If you have every used the Command Line, or CMD, interface in Windows, you probably have some idea of the powerful things it can do. Creating your own CMD scripts, you can do even more, but faster.

A CMD script does the same thing as if you typed commands into the CMD window. If you want to do something on a regular basis, such as telling Windows to turn off your computer after an hour, you can write a script and then you can activate the script whenever you want to run it.

Understanding CMD and Written Commands

In the early days of personal computing almost everything was done by typing command_s into a command line interface. If you wanted to open a program, you had to type the name of the program into the command line. Today, you can simply click or touch an icon on your screen to perform most actions. But Windows still accepts type-written commands in the CMD utility. You can write commands_ to open programs, add or change account permissions, back up files or get information about your computer using the CMD window.

Understanding CMD Scripts

The Command Prompt utility in Windows can be opened at any time, simply by typing «cmd» in the Windows Start menu. Here, you can type all sorts of commands to open programs, change settings and make tweaks to how Windows and its programs perform. In Microsoft’s long history of operating systems, CMD i_s a relative newcomer. In MS-DOS, before Windows was released, when you wanted to run a script, you would save it as a .bat file. While you can still save files with that extension today, most people use the .cmd extension._

Using a Script CMD to Open Notepad

To create and save a CMD switch, it’s best to use a basic text editor. Using a word processor like Microsoft Word makes saving the file a hassle. Notepad is much easier to use. So to demonstrate how CMD works, let’s open use it to open Notepad.

  1. Type CMD in the Windows Start menu and press Enter to open CMD.exe.
  2. Change the directory from your current username folder to the base directory by typing «cd» and pressing Enter. It should now read «C:>» before the blinking cursor.
  3. Type the following line and press Enter: start «c:windowssystem32» notepad.exe

As soon as you press Enter, you will see Notepad open. The command you entered has told Windows to start the notepad.exe program, which is located in the system32 folder, which is inside the Windows folder, on the C: drive. CMD commands are not case-sensitive so you can use lowercase or uppercase letters interchangeably.

Creating Your First Script CMD File

Now that Notepad is open, create your first CMD script file by typing the same line you used in the CMD window into notepad: start «c:windowssystem32» notepad.exe

Save the batch file to your desktop by selecting «Save As» from the File menu. Name the file «firstscript.cmd» and click «Save.» Notepad script commands must be saved with the .cmd extension, rather than the default .txt extension.

Double-click the new CMD file on your desktop. You will see the CMD window open for a fraction of a second and then close as Notepad is launched.

This is hardly a useful script, since a desktop shortcut does the same thing. To create something more useful, let’s edit the file so that it creates a new text file on your desktop listing all of your programs.

Using Echo and Echo Off

While the CMD window wasn’t open long enough to see it, by default it will always display the text that was entered in the CMD file when it runs. For longer scripts, this can be a nuisance, so it’s generally good form to turn this off by using the Echo Off command in the first line of the CMD file. By itself, Echo Off disables the display of any text that follows it. To make the Echo Off command apply to itself, put an @ symbol in front of it. Thus, your two-line CMD script would be:

@echo off

start «c:windowssystem32» notepad.exe

Creating a Text File Script

This CMD script will list all the files you have in your Program Files folder and put that list in a new text file.

  1. Open Notepad. Type «@echo off«in the first line and press Enter.
  2. In the second line, type: dir «C:Program Files» > list_of_files.txt
  3. Select «Save As» from the File menu and save the file as «program-list-script.cmd.»
  4. Double-click the new text file on your desktop to see the list of files and folders.

The text file will appear in the same folder where the script file itself is. So if the script file is on your desktop, the list-of-files.txt file will also appear on your desktop.

If you want to change the folder where the text file is placed, you can specify its own folder in the script. For example, if you want it to be placed in your Documents folder, use: dir «C:Program Files» > C:UsersDavidDocumentslist_of_files.txt

Creating a Systems Information Script

If you want to use a script to give you needed information, it’s not always necessary to produce a text document with a script. You can have the information posted directly in the CMD window.

The example script below will give you basic information about your computer, including the operating system and version number, the BIOS version, the total physical memory and your computer’s network address. To use the script, type or copy the lines below into a new Notepad file and save it with the .cmd file extension, such as «my_computer_info.cmd.»

In this example, ECHO OFF is used to prevent the CMD window from displaying the script.

The ECHO command is used to display specific text, as well as some equal signs (===) as lines to organize the information in sections.

To insert a comment for your own use — without it affecting the script or appearing in the CMD window — type two colons first. Anything in the same line following » :: « will be commented out from the script.

The PAUSE command directs the CMD program to stay open. Pressing any key on your keyboard will close the window.

@ECHO OFF

:: This CMD script provides you with your operating system, hardware and network information.

TITLE My System Info

ECHO Please wait… Gathering system information.

ECHO =========================

ECHO OPERATING SYSTEM

systeminfo | findstr /c:»OS Name»

systeminfo | findstr /c:»OS Version»

ECHO =========================

ECHO BIOS

systeminfo | findstr /c:»System Type»

ECHO =========================

ECHO MEMORY

systeminfo | findstr /c:»Total Physical Memory»

ECHO =========================

ECHO CPU

wmic cpu get name

ECHO =========================

ECHO NETWORK ADDRESS

ipconfig | findstr IPv4

ipconfig | findstr IPv6

PAUSE

Using Scripts to Shut Down Your Computer

Normally, when you shut down your computer, it happens instantaneously. Suppose, however, that you’re listening to an audiobook or watching a training video — and you know that you will fall asleep after an hour. You can use a CMD script to tell your computer to shut itself down, after a specified period of time, using the shutdown command.

When you use the shutdown command, you need to include two additional switches, or subcommands. The first tells the computer to either shutdown or restart. You can use either -s or — r. The second tells the computer how many seconds to wait before performing the command. For this you use -t, followed by the number of seconds.

To shutdown the computer in one second, use: shutdown -s -t 01

To restart the computer in eight seconds, use: shutdown -r -t 08

To shutdown the computer in two hours use: shutdown -s -t 7200

Backing Up Files With a CMD Script

If you find it tedious to back up your files to a second storage device, using a CMD script makes the process a breeze. For this, use the Robocopy command. For example, if you want to back up all of the files in your Documents folder onto a removable storage device, you can write the command in a CMD file and then — at the end of the day — simply double click the file to activate it.

The Robocopy command needs to know, first — which folder you want to copy and, second — where you want the copy placed. Both the source and destination need to be in quotation marks.

If you’re not certain what your drive letters are, open File Explorer and click on «My Computer.»

For example, if your User name is MyName, your Documents folder is in your C: drive and your Backup folder is in a removable storage D: drive, then the command would be:

robocopy D:UsersMyNameDocuments F:Backup /XA:H /W:0 /R:1 > F:Backupbackup.log

This example is a bit more complicated, since Robocopy offers you a lot of options.

D:UsersMyNameDocuments: the folder you want to back up.

F:Backup: the location of your Backup folder.

/XA:H: ignores hidden files.

/W:0: waits zero seconds between retries, instead of the default 30 seconds.

/R:1: retry only once if the file is locked.

> F:Backupbackup.log: create a backup log placed in the Backup folder.

Note that because this is a mirror backup, if you delete files from the source folder, they will be deleted from the Backup folder the next time you use the script. It would be a good idea to explore additional switches available for Robocopy, so that you ensure that you backup your files the way that works best for you.

If you have every used the Command Line, or CMD, interface in Windows, you probably have some idea of the powerful things it can do. Creating your own CMD scripts, you can do even more, but faster.

A CMD script does the same thing as if you typed commands into the CMD window. If you want to do something on a regular basis, such as telling Windows to turn off your computer after an hour, you can write a script and then you can activate the script whenever you want to run it.

Understanding CMD and Written Commands

In the early days of personal computing almost everything was done by typing command_s into a command line interface. If you wanted to open a program, you had to type the name of the program into the command line. Today, you can simply click or touch an icon on your screen to perform most actions. But Windows still accepts type-written commands in the CMD utility. You can write commands_ to open programs, add or change account permissions, back up files or get information about your computer using the CMD window.

Understanding CMD Scripts

The Command Prompt utility in Windows can be opened at any time, simply by typing «cmd» in the Windows Start menu. Here, you can type all sorts of commands to open programs, change settings and make tweaks to how Windows and its programs perform. In Microsoft’s long history of operating systems, CMD i_s a relative newcomer. In MS-DOS, before Windows was released, when you wanted to run a script, you would save it as a .bat file. While you can still save files with that extension today, most people use the .cmd extension._

Using a Script CMD to Open Notepad

To create and save a CMD switch, it’s best to use a basic text editor. Using a word processor like Microsoft Word makes saving the file a hassle. Notepad is much easier to use. So to demonstrate how CMD works, let’s open use it to open Notepad.

  1. Type CMD in the Windows Start menu and press Enter to open CMD.exe.
  2. Change the directory from your current username folder to the base directory by typing «cd» and pressing Enter. It should now read «C:>» before the blinking cursor.
  3. Type the following line and press Enter: start «c:windowssystem32» notepad.exe

As soon as you press Enter, you will see Notepad open. The command you entered has told Windows to start the notepad.exe program, which is located in the system32 folder, which is inside the Windows folder, on the C: drive. CMD commands are not case-sensitive so you can use lowercase or uppercase letters interchangeably.

Creating Your First Script CMD File

Now that Notepad is open, create your first CMD script file by typing the same line you used in the CMD window into notepad: start «c:windowssystem32» notepad.exe

Save the batch file to your desktop by selecting «Save As» from the File menu. Name the file «firstscript.cmd» and click «Save.» Notepad script commands must be saved with the .cmd extension, rather than the default .txt extension.

Double-click the new CMD file on your desktop. You will see the CMD window open for a fraction of a second and then close as Notepad is launched.

This is hardly a useful script, since a desktop shortcut does the same thing. To create something more useful, let’s edit the file so that it creates a new text file on your desktop listing all of your programs.

Using Echo and Echo Off

While the CMD window wasn’t open long enough to see it, by default it will always display the text that was entered in the CMD file when it runs. For longer scripts, this can be a nuisance, so it’s generally good form to turn this off by using the Echo Off command in the first line of the CMD file. By itself, Echo Off disables the display of any text that follows it. To make the Echo Off command apply to itself, put an @ symbol in front of it. Thus, your two-line CMD script would be:

@echo off

start «c:windowssystem32» notepad.exe

Creating a Text File Script

This CMD script will list all the files you have in your Program Files folder and put that list in a new text file.

  1. Open Notepad. Type «@echo off«in the first line and press Enter.
  2. In the second line, type: dir «C:Program Files» > list_of_files.txt
  3. Select «Save As» from the File menu and save the file as «program-list-script.cmd.»
  4. Double-click the new text file on your desktop to see the list of files and folders.

The text file will appear in the same folder where the script file itself is. So if the script file is on your desktop, the list-of-files.txt file will also appear on your desktop.

If you want to change the folder where the text file is placed, you can specify its own folder in the script. For example, if you want it to be placed in your Documents folder, use: dir «C:Program Files» > C:UsersDavidDocumentslist_of_files.txt

Creating a Systems Information Script

If you want to use a script to give you needed information, it’s not always necessary to produce a text document with a script. You can have the information posted directly in the CMD window.

The example script below will give you basic information about your computer, including the operating system and version number, the BIOS version, the total physical memory and your computer’s network address. To use the script, type or copy the lines below into a new Notepad file and save it with the .cmd file extension, such as «my_computer_info.cmd.»

In this example, ECHO OFF is used to prevent the CMD window from displaying the script.

The ECHO command is used to display specific text, as well as some equal signs (===) as lines to organize the information in sections.

To insert a comment for your own use — without it affecting the script or appearing in the CMD window — type two colons first. Anything in the same line following » :: « will be commented out from the script.

The PAUSE command directs the CMD program to stay open. Pressing any key on your keyboard will close the window.

@ECHO OFF

:: This CMD script provides you with your operating system, hardware and network information.

TITLE My System Info

ECHO Please wait… Gathering system information.

ECHO =========================

ECHO OPERATING SYSTEM

systeminfo | findstr /c:»OS Name»

systeminfo | findstr /c:»OS Version»

ECHO =========================

ECHO BIOS

systeminfo | findstr /c:»System Type»

ECHO =========================

ECHO MEMORY

systeminfo | findstr /c:»Total Physical Memory»

ECHO =========================

ECHO CPU

wmic cpu get name

ECHO =========================

ECHO NETWORK ADDRESS

ipconfig | findstr IPv4

ipconfig | findstr IPv6

PAUSE

Using Scripts to Shut Down Your Computer

Normally, when you shut down your computer, it happens instantaneously. Suppose, however, that you’re listening to an audiobook or watching a training video — and you know that you will fall asleep after an hour. You can use a CMD script to tell your computer to shut itself down, after a specified period of time, using the shutdown command.

When you use the shutdown command, you need to include two additional switches, or subcommands. The first tells the computer to either shutdown or restart. You can use either -s or — r. The second tells the computer how many seconds to wait before performing the command. For this you use -t, followed by the number of seconds.

To shutdown the computer in one second, use: shutdown -s -t 01

To restart the computer in eight seconds, use: shutdown -r -t 08

To shutdown the computer in two hours use: shutdown -s -t 7200

Backing Up Files With a CMD Script

If you find it tedious to back up your files to a second storage device, using a CMD script makes the process a breeze. For this, use the Robocopy command. For example, if you want to back up all of the files in your Documents folder onto a removable storage device, you can write the command in a CMD file and then — at the end of the day — simply double click the file to activate it.

The Robocopy command needs to know, first — which folder you want to copy and, second — where you want the copy placed. Both the source and destination need to be in quotation marks.

If you’re not certain what your drive letters are, open File Explorer and click on «My Computer.»

For example, if your User name is MyName, your Documents folder is in your C: drive and your Backup folder is in a removable storage D: drive, then the command would be:

robocopy D:UsersMyNameDocuments F:Backup /XA:H /W:0 /R:1 > F:Backupbackup.log

This example is a bit more complicated, since Robocopy offers you a lot of options.

D:UsersMyNameDocuments: the folder you want to back up.

F:Backup: the location of your Backup folder.

/XA:H: ignores hidden files.

/W:0: waits zero seconds between retries, instead of the default 30 seconds.

/R:1: retry only once if the file is locked.

> F:Backupbackup.log: create a backup log placed in the Backup folder.

Note that because this is a mirror backup, if you delete files from the source folder, they will be deleted from the Backup folder the next time you use the script. It would be a good idea to explore additional switches available for Robocopy, so that you ensure that you backup your files the way that works best for you.

Скрипты выполняемые интерпретатором CMD.EXE — стандартной консольной оболочкой для Win2000/WinXP/Vista/Seven/Win8/Win2000 Server/Win2003/Win2008.
Иначе говоря — пакетники. Иногда еще их(не вполне оправданно) называют батниками, но классический батник использует возможности обеспечиваемые оболочкой предыдущих систем COMMAND.COM, возможности которого существенно меньше.

  • Блог пользователя yurkesha

Выключение компьютеров в домене по списку

Монолитный скрипт выключения компьютеров в домене по списку:

@ECHO OFF
SET "BEGIN_MARKER=:ENDFILE1"
SET "END_MARKER=:ENDFILE2"
FOR /F "usebackq tokens=1 delims=:" %%a IN (`FINDSTR /N /B /C:"%BEGIN_MARKER%" "%~0"`) DO SET "SKIP_LINE=%%a"
CALL :WORK "%SKIP_LINE%" "%END_MARKER%" "%~0"
GOTO :EOF

:WORK
FOR /F "usebackq skip=%~1 tokens=1 eol=; delims=" %%a IN (`TYPE "%~3"`) DO IF NOT "%%a"=="%~2" (CALL :PROCEDURE "%%a") ELSE (GOTO :EOF)
GOTO :EOF

:PROCEDURE
(ping -n 1 %~1|FIND /I "TTL=")&&(
ECHO Комп "\%~1" Включен - выключаю...
shutdown -f /s /m \%~1 -t 1
)||ECHO Комп "\%~1" выключен
GOTO :EOF

:ENDFILE1
PC1
PC2
PC3
:ENDFILE2
  • Блог пользователя yurkesha

Единый логон-скрипт для AD

Моя попытка навести порядок и унификацию при подключении сетевых дисков в AD.

Возможна работа как через индивидуальные групповые политики, так и через политику AD по-умолчанию.

Идея состоит в следующем: храним описание вариантов подключений в текстовых файлах, с указанием группы для которой это работает, и анализируем при запуске грeппы конкретного пользователя с использованием dsget и dsquery.

Структура хранимых описаний такова: групповые и общедоменные назначачения хранятся в едином файле расположенном в корне NETLOGON(возможны варианты), а пользовательские назначения располагаются в папках с пользовательским именем входа  в систему.
Также в отдельных файлах храним описание запускаемых скриптов для групп и пользователей.

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

Структура решения:
dsget.exe — файл из RK для получения списка групп пользователя
dsquery.dll— файл из RK для получения списка групп пользователя
dsquery.exe— файл из RK для получения списка групп пользователя
logon.cmd — собственно тело скрипта
logon.vbs — костыль для запуска без отображения окна консоли — именно он должен быть назначен в качестве логон скрипта
rs_list.txt — список групповых и общедоменных назначений подключаемых дисков с указанием группы
sc_list.txt — список групповых и общедоменных назначений выполняемых скриптов с указанием группы
_SCRIPT — папка с групповыми и общедоменными скриптами
_SCRIPT1C.cmd — пример скрипта
USER1rs_list.txt- список назначений подключаемых дисков для конкретного пользователя(без указания группы)
USER1sc_list.txt— список назначений выполняемых скриптов для конкретного пользователя(без указания группы)
USER2rs_list.txtсписок назначений подключаемых дисков для конкретного пользователя(без указания группы)
USER2sc_list.txt- список назначений выполняемых скриптов для конкретного пользователя(без указания группы)
Прикрепляю файл с телом скрипта и тестовой структурой.

Приветствуются пожелания по доработке ;)
Добавил ключ рекурсивного анализа вхождения в группы.

И на всякий случай тело скрипта в текстовом виде:


@ECHO OFF
:: Буквы дисков зарезервированные под пользовательские сетевые подключения
SET "EXLUDE_LETTER=D: E: F: J: H: I: J:"
"%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^
%~dp0dsget.exe user -memberof |findstr /I /C:"CN=Domain Users,"&&(
:: Удаление текущих сетевых подключений
FOR /F "usebackq tokens=2 delims= " %%a IN (`net use^|find ":"^|find "\"^|FINDSTR /V /I "%EXLUDE_LETTER%"`) DO (
1>NUL 2>&1 NET USE /DELETE %%a)
:: Добавление групповых сетевых подключений
IF EXIST "%~dp0rs_list.txt" (
FOR /F "usebackq tokens=1,2,3 eol=; delims=|" %%a IN (`TYPE "%~dp0rs_list.txt"^|FIND "\"`) DO (
"%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^
%~dp0dsget.exe user -memberof -expand |1>NUL 2>&1 findstr /I /C:"CN=%%~c,"&&(
1>NUL 2>&1 NET USE %%a: %%b /PERSISTENT:NO)))
:: Выполнение групповых скриптов
IF EXIST "%~dp0sc_list.txt" (
FOR /F "usebackq tokens=1,2 eol=; delims=|" %%a IN (`TYPE "%~dp0sc_list.txt"^|FINDSTR /I ".cmd .bat"`) DO (
"%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^
%~dp0dsget.exe user -memberof -expand |1>NUL 2>&1 findstr /I /C:"CN=%%~b,"&&(
IF EXIST "%~dp0%%~a" CALL "%~dp0%%~a")))
:: Добавление пользовательских сетевых подключений
IF EXIST "%~dp0%USERNAME%rs_list.txt" (
FOR /F "usebackq tokens=1,2 eol=; delims=|" %%a IN (`TYPE "%~dp0%USERNAME%rs_list.txt"^|FIND "\"`) DO (
1>NUL 2>&1 NET USE %%a: %%b /PERSISTENT:NO))
:: Выполнение пользовательских скриптов
IF EXIST "%~dp0%USERNAME%sc_list.txt" (
FOR /F "usebackq tokens=1 eol=; delims=|" %%a IN (`TYPE "%~dp0%USERNAME%sc_list.txt"^|FIND /I ".cmd"`) DO (
IF EXIST "%~dp0%%~a" CALL "%~dp0%%~a"))
)
EXIT 0
  • Блог пользователя yurkesha

Интерпретатор CMD — вывод переменных со спецсимволами на экран и в файл

Известная, но слабоосвещенная тема — обработка в коммандном интерпретаторе CMD данных со спецсимволами.
В большинстве ситуаций она вполне решаема…
Плюс к этому периодически возникают задачи вывода в файл без перевода строки.
Несколько лет назад (на ру-борде) я выкладывал семпловый код, который достаточно подробно иллюстрирует примеры возможной работы:

@ECHO OFF&CLS
(ECHO Обработка переменных со спецсимволами «(«, «)»,»&»,»|»,»>»,»<«)
(ECHO SET «AAA=сообщение()&|<>команда»)
SET «AAA=сообщение()&|<>команда»

(ECHO Вывод на экран с обрамляющими двойными кавычками)
(ECHO ^(ECHO «%%AAA%%»^))
(ECHO «%AAA%»)

(ECHO Перенаправление значения переменной в файл file.txt с переводом строки то есть с CR/LF)
(ECHO с заменой существующего file.txt)
(ECHO SET /p»=%%AAA%%»^<nul 1^>file.txt^&ECHO.^>^>file.txt)
SET /p»=%AAA%»<nul 1>file.txt&ECHO.>>file.txt

(ECHO Перенаправление значения переменной в файл file.txt с переводом строки то есть с CR/LF)
(ECHO дописыванием в существующий file.txt)
(ECHO SET /p»=%%AAA%%»^<nul 1^>^>file.txt^&ECHO. 1^>^>file.txt)
SET /p»=%AAA%»<nul 1>>file.txt&ECHO. 1>>file.txt

(ECHO Перенаправление значения переменной в файл file1.txt без перевода строки то есть без CR/LF)
(ECHO с заменой существующего file1.txt)
(ECHO SET /p»=%%AAA%%»^<nul 1^>file1.txt)
SET /p»=%AAA%»<nul 1>file1.txt

(ECHO Перенаправление значения переменной в файл file1.txt без перевода строки то есть без CR/LF)
(ECHO с дописыванием в существующий file1.txt)
(ECHO SET /p»=%%AAA%%»^<nul 1^>^>file1.txt)
SET /p»=%AAA%»<nul 1>>file1.txt

(ECHO Вывод значения переменной на экран с переводом строки то есть с CR/LF)
(ECHO SET /p»=%%AAA%%»^<nul^&ECHO.)
(ECHO ^(ECHO Вторая строка^))
SET /p»=%AAA%»<nul&ECHO.
(ECHO Вторая строка)

(ECHO Вывод значения переменной на экран без перевода строки то есть с CR/LF)
(ECHO SET /p»=%%AAA%%»^<nul)
(ECHO ^(ECHO Вторая строка^))
SET /p»=%AAA%»<nul
(ECHO Вторая строка)

(ECHO Метод предварительной подготовки: )
(ECHO SET «AAA=%%AAA:&=^&%%»)
(ECHO SET «AAA=%%AAA:|=^|%%»)
(ECHO SET «AAA=%%AAA:<=^<%%»)
(ECHO SET «AAA=%%AAA:>=^>%%»)
(ECHO SET «AAA=%%AAA:(=^(%%»)
(ECHO SET «AAA=%%AAA:)=^)%%»)
SET «AAA=%AAA:&=^&%»
SET «AAA=%AAA:|=^|%»
SET «AAA=%AAA:<=^<%»
SET «AAA=%AAA:>=^>%»
SET «AAA=%AAA:(=^(%»
SET «AAA=%AAA:)=^)%»
(ECHO ^(ECHO %%AAA%%^))
(ECHO %AAA%)
PAUSE

Кодировка приведенного скрипта CP866.
Для ознакомления рекомендуется выполнить ;)
Само-собой в случае вопросов постараюсь ответить…

  • Блог пользователя yurkesha

Логофф сессий отключенных пользователей на терминальном сервере

Убить все отключенные сессии:

@ECHO OFF
FOR /F "USEBACKQ TOKENS=2 DELIMS= " %%a IN (`quser^|findstr /b /v "^>"^|findstr /i /v " ID "^|findstr /v /i "rdp-tcp"`) DO logoff %%~a
EXIT 0
  • Блог пользователя yurkesha

Перевод столбца в строку

Преобразование столбца в строку с заданными разделителями и обрамлением. Кодировка скрипта CP866.
Символ двойной кавычки при этом не удастся использовать как разделитель или обрамление.
Принцип работы такой: на входе файл с набором строк, на выходе файл с одной строкой где исходные строки обрамлены нужным разделителем(на самом деле набором символов) и разделяются заданным разделителем(также набор символов).

@ECHO OFF
:: Принимает четыре параметра из командной строки:
:: 1 - имя файла для обработки (обязательный!)
:: 2 - имя файла результата (необязательный!)
:: при незаданном параметре будет использован файл result.txt в текущей папке
SET FILE_RESULT=%~dp0result.txt
:: 3 - последовательность символов как разделитель для вывода (необязательный!)
:: при незаданном параметре будет использован символ
:: При указании ОБЯЗАТЕЛЬНО параметр брать в двойные кавычки!!!
SET RAZDEL=,
:: 4 - символ который будет использоваться для обрамления вывода по текущей строке (необязательный!)
:: при незаданном параметре будет использован символ '
:: При указании ОБЯЗАТЕЛЬНО параметр брать в двойные кавычки!!!
SET FRAME='
IF %~1==(
ECHO Имя файла для обработки не указано!
GOTO :ERR
)

IF NOT EXIST %~1 (
ECHO Файл для обработки не существует!
GOTO :ERR
)
IF NOT %~2== (
SET FILE_RESULT=%~2
)
IF NOT %~3== (
SET RAZDEL=%~3
)
IF NOT %~4== (
SET FRAME=%~4
)
FOR /F usebackq tokens=* delims= %%a IN (%~1) DO CALL :MAIN %%~a
GOTO :EOF
:MAIN
SET /p=%RAZDEL1%%FRAME%%~1%FRAME%<nul>>%FILE_RESULT%
SET RAZDEL1=%RAZDEL%
GOTO :EOF
:ERR
PAUSE
GOTO :EOF
  • Блог пользователя yurkesha

Подключение к WSUS машины не входящей в домен

Идем в ветку реестра

[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdate]

Экспортируем ее в файл и добавляем в реестр ПК в домен не входящих. Это приведет к обращению на сервер указанный в ветке. Для проверки запускаем в командной строке: wuauclt /detectnow Смотрим логи C:windowsWindowsUpdate.log, идем в конец файла и находим строку вида:

2013-03-23 18:13:56:375  908 1074 PT +++++++++++  PT: Synchronizing server updates  +++++++++++
2013-03-23 18:13:56:375  908 1074 PT   + ServiceId = {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}, Server URL = http://192.168.0.10:8080/ClientWebService/client.asmx

где 192.168.0.10 — имя сервера, на котором у нас крутится WSUS. Если нет, проверяем значения ключей реестра

HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateWUServer HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateWUStatusServer

их значение должно соответствовать 192.168.0.10:8080. Если соответствует, перезагружаемся и проверяем еще раз, если не соответствует — правим значения, перезагружаемся, проверяем. Ветка реестра, отвечающий за настройку политики WindowsUpdate в общем виде выглядит приблизительно так:

[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdate]
"AcceptTrustedPublisherCerts"=dword:00000001
"WUServer"="http://192.168.0.10:8080"
"WUStatusServer"="http://192.168.0.10:8080"

[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU]
"NoAutoUpdate"=dword:00000000
"AUOptions"=dword:00000003
"ScheduledInstallDay"=dword:00000000
"ScheduledInstallTime"=dword:00000010
"NoAutoRebootWithLoggedOnUsers"=dword:00000001
"DetectionFrequencyEnabled"=dword:00000001
"DetectionFrequency"=dword:00000008
"UseWUServer"=dword:00000001
  • Блог пользователя serg kaac

Преобразование файлов 1CClientBankExchange в табличную форму

Лично мне периодически приходилось сталкиваться с обработкой данных не в табличной форме, а в «именованном формате» то есть когда каждый параметр пишется на отдельной строке в виде Параметр=Значение параметра причем файл имеет строго выраженную периодическую структуру и любой из параметров является необязательным. Порядок следования — произвольный.
Пример такого формата — стандартный формат 1С для общения с клиент-банками 1CClientBankExchange
На самом деле его можно даже средствами «малой механизации»(то есть чистый CMD-скрипт) преобразовать в табличную форму для дальнейшей обработки.
Привожу пример скрипта(кодировка Win1251):

@ECHO OFF CLS
COLOR 1E
CHCP 1251>NUL 2>&1

:: Папка с файлами для обработки. Полный путь в WIN1251!!!
SET "INPUT_DIR=D:DATABASE"
:: Папка с выходными файлами. Полный путь в WIN1251!!!
:: Может совпадать с исходной папкой.
SET "OUTPUT_DIR=D:DATABASE"
:: Папка для бэкапа входящих файлов. Полный путь в WIN1251!!!
:: Если она не указана то исходные файлы удалятся!!!
SET "BACKUP_DIR=D:DATABASEBACKUP"
:: Маска файлов для обработки
SET "FILE_MASK=to1c????.txt"

IF NOT EXIST "%INPUT_DIR%" (ECHO Папка с файлами для обработки не найдена!&GOTO ERROR)
2>NUL DIR /B "%INPUT_DIR%%FILE_MASK%"|1>NUL FIND /C /V ""||(ECHO Файлы для обработки не найдены!&GOTO ERROR)
IF NOT EXIST "%OUTPUT_DIR%" MD "%OUTPUT_DIR%"
IF NOT EXIST "%OUTPUT_DIR%" ECHO Не удалось создать папку для выходных файлов!&GOTO ERROR
IF NOT "%BACKUP_DIR%"=="" (
IF NOT EXIST "%BACKUP_DIR%" MD "%BACKUP_DIR%"
IF NOT EXIST "%BACKUP_DIR%" ECHO Не удалось создать папку для бэкапа файлов!&GOTO ERROR
)

ECHO Представляем системную дату в удобном виде:
ECHO wscript.ECHO YEAR(DATE) ^& RIGHT(0 ^& MONTH(DATE),2) ^& RIGHT(0 ^& DAY(DATE),2)>"%TEMP%tmp.vbs"
FOR /F %%i IN ('cscript "%TEMP%tmp.vbs" //Nologo') DO SET "TEKDATA=%%i"
IF EXIST "%TEMP%tmp.vbs" DEL "%TEMP%tmp.vbs"
ECHO %TEKDATA%

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "usebackq" %%i IN (`DIR /B /A:-D "%INPUT_DIR%%FILE_MASK%"`) DO (0<"%INPUT_DIR%%%i" SET /P "LINE_1=") &IF /I "!LINE_1!"=="1CClientBankExchange" CALL :MAIN "%%i"
ENDLOCAL
EXIT

:MAIN
SET "FILE_NAME=%~1"
SET "NEWFILE_NAME=%TEKDATA%_%~1"
ECHO Выводим строку заголовков
1>"%OUTPUT_DIR%%NEWFILE_NAME%" (ECHO 01-Номер^|02-Дата^|03-Сумма^|04-ДатаСписано^|05-Плательщик^|06-ПлательщикИНН^|07-ПлательщикКПП^|08-Плательщик1^|09-ПлательщикСчет^|10-ПлательщикРасчСчет^|11-ПлательщикБанк1^|12-ПлательщикБанк2^|13-ПлательщикБИК^|14-ПлательщикКорсчет^|15-ДатаПоступило^|16-Получатель^|17-ПолучательИНН^|18-ПолучательКПП^|19-Получатель1^|20-ПолучательСчет^|21-ПолучательРасчСчет^|22-ПолучательБанк1^|23-ПолучательБанк2^|24-ПолучательБИК^|25-ПолучательКорсчет^|26-ВидПлатежа^|27-ВидОплаты^|28-СтатусСоставителя^|29-ПоказательКБК^|30-ОКАТО^|31-ПоказательОснования^|32-ПоказательПериода^|33-ПоказательНомера^|34-ПоказательДаты^|35-ПоказательТипа^|36-СрокПлатежа^|37-Очередность^|38-НазначениеПлатежа^|39-Имя файла для приема^|)

SET "POINTER="
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "USEBACKQ TOKENS=1* DELIMS== " %%a in ("%INPUT_DIR%%FILE_NAME%") DO (
IF "%%a"=="КонецДокумента" CALL :TOFILE&SET "POINTER=0"
IF !POINTER!==1 (IF NOT "%%~b"=="" (
IF /I "%%~a"=="Номер" SET "PP_1=%%~b"
IF /I "%%~a"=="Дата" SET "PP_2=%%~b"
IF /I "%%~a"=="Сумма" SET "PP_3=%%~b"
IF /I "%%~a"=="ДатаСписано" SET "PP_4=%%~b"
IF /I "%%~a"=="Плательщик" SET "PP_5=%%~b"
IF /I "%%~a"=="ПлательщикИНН" SET "PP_6=%%~b"
IF /I "%%~a"=="ПлательщикКПП" SET "PP_7=%%~b"
IF /I "%%~a"=="Плательщик1" SET "PP_8=%%~b"
IF /I "%%~a"=="ПлательщикСчет" SET "PP_9=%%~b"
IF /I "%%~a"=="ПлательщикРасчСчет" SET "PP_10=%%~b"
IF /I "%%~a"=="ПлательщикБанк1" SET "PP_11=%%~b"
IF /I "%%~a"=="ПлательщикБанк2" SET "PP_12=%%~b"
IF /I "%%~a"=="ПлательщикБИК" SET "PP_13=%%~b"
IF /I "%%~a"=="ПлательщикКорсчет" SET "PP_14=%%~b"
IF /I "%%~a"=="ДатаПоступило" SET "PP_15=%%~b"
IF /I "%%~a"=="Получатель" SET "PP_16=%%~b"
IF /I "%%~a"=="ПолучательИНН" SET "PP_17=%%~b"
IF /I "%%~a"=="ПолучательКПП" SET "PP_18=%%~b"
IF /I "%%~a"=="Получатель1" SET "PP_19=%%~b"
IF /I "%%~a"=="ПолучательСчет" SET "PP_20=%%~b"
IF /I "%%~a"=="ПолучательРасчСчет" SET "PP_21=%%~b"
IF /I "%%~a"=="ПолучательБанк1" SET "PP_22=%%~b"
IF /I "%%~a"=="ПолучательБанк2" SET "PP_23=%%~b"
IF /I "%%~a"=="ПолучательБИК" SET "PP_24=%%~b"
IF /I "%%~a"=="ПолучательКорсчет" SET "PP_25=%%~b"
IF /I "%%~a"=="ВидПлатежа" SET "PP_26=%%~b"
IF /I "%%~a"=="ВидОплаты" SET "PP_27=%%~b"
IF /I "%%~a"=="СтатусСоставителя" SET "PP_28=%%~b"
IF /I "%%~a"=="ПоказательКБК" SET "PP_29=%%~b"
IF /I "%%~a"=="ОКАТО" SET "PP_30=%%~b"
IF /I "%%~a"=="ПоказательОснования" SET "PP_31=%%~b"
IF /I "%%~a"=="ПоказательПериода" SET "PP_32=%%~b"
IF /I "%%~a"=="ПоказательНомера" SET "PP_33=%%~b"
IF /I "%%~a"=="ПоказательДаты" SET "PP_34=%%~b"
IF /I "%%~a"=="ПоказательТипа" SET "PP_35=%%~b"
IF /I "%%~a"=="СрокПлатежа" SET "PP_36=%%~b"
IF /I "%%~a"=="Очередность" SET "PP_37=%%~b"
IF /I "%%~a"=="НазначениеПлатежа" SET "PP_38=%%~b"
SET "PP_39=\%COMPUTERNAME%@%INPUT_DIR%%FILE_NAME%"
)
)
IF /I "%%a"=="СекцияДокумент" (SET "POINTER=1"&CALL :INIT)
)
ENDLOCAL
ECHO Формирование файла "%OUTPUT_DIR%%NEWFILE_NAME%" формата текст с разделителями завершено!
IF NOT EXIST "%BACKUP_DIR%%TEKDATA%" MD "%BACKUP_DIR%%TEKDATA%"
IF NOT "%BACKUP_DIR%"=="" (MOVE /Y "%INPUT_DIR%%FILE_NAME%" "%BACKUP_DIR%%TEKDATA%") ELSE (DEL /Q /F "%INPUT_DIR%%FILE_NAME%")
GOTO :EOF

:INIT
FOR /L %%z IN (1,1,39) DO SET "PP_%%z="
GOTO :EOF

:TOFILE
ECHO Вывод платежки N %PP_1% в файл "%OUTPUT_DIR%%NEWFILE_NAME%"
FOR /L %%z IN (1,1,39) DO (
1>>"%OUTPUT_DIR%%NEWFILE_NAME%" SET /P "=!PP_%%z!^|" >"%OUTPUT_DIR%%NEWFILE_NAME%" (ECHO.)
GOTO :EOF

:ERROR
PAUSE
COLOR

При этом получим на выходе текстовый файл с разделителем «|» между полями.
Первой строкой будет выведена строка заголовков:
01-Номер|
02-Дата|
03-Сумма|
04-ДатаСписано|
05-Плательщик|
06-ПлательщикИНН|
07-ПлательщикКПП|
08-Плательщик1|
09-ПлательщикСчет|
10-ПлательщикРасчСчет|
11-ПлательщикБанк1|
12-ПлательщикБанк2|
13-ПлательщикБИК|
14-ПлательщикКорсчет|
15-ДатаПоступило|
16-Получатель|
17-ПолучательИНН|
18-ПолучательКПП|
19-Получатель1|
20-ПолучательСчет|
21-ПолучательРасчСчет|
22-ПолучательБанк1|
23-ПолучательБанк2|
24-ПолучательБИК|
25-ПолучательКорсчет|
26-ВидПлатежа|
27-ВидОплаты|
28-СтатусСоставителя|
29-ПоказательКБК|
30-ОКАТО|
31-ПоказательОснования|
32-ПоказательПериода|
33-ПоказательНомера|
34-ПоказательДаты|
35-ПоказательТипа|
36-СрокПлатежа|
37-Очередность|
38-НазначениеПлатежа|
39-Имя файла для приема|

Само-собой не в приведенном виде — а в виде одной строки ;)

  • Блог пользователя yurkesha

Страховое копирование по списку

Относительно простой вариант резервного копирования по списку файлов/папок с учетом типа резервной копии и количества хранимых копий по типам. Классические типы: дневная-недельная-месячная-годовая копии. Кодировка скрипта CP866. В приаттаченом файле содержится сам скрипт, пример файла списка и консольные версии архиватора 7z.

@ECHO OFF CLS SETLOCAL :: Папка для хранения резервных копий - если надо не текущую впишите свою
:: По-умолчанию текущая папка
SET "BACKUP_DIR=%~dp0"
:: Постоянная часть имени архива - для уникальной идентефикации архива
SET "SOURCE_NAME=MY_BACKUP_1"
:: Имя и месторасположение файла со списком для резервного копирования
:: Имена папок пишутся либо с символом "" в конце либо без него
SET "BACKUP_LIST=%~dp0listbackup.txt"
:: Кодировка списка - доступные варианты: UTF-8, WIN, DOS
SET "LIST_CHARSET=DOS"
::Тип бэкапа: DAY, WEEK, MONTH, YEAR
::День недели число
::1 - Воскресенье
::2 - Понедельник
::3 - Вторник
::4 - Среда
::5 - Четверг
::6 - Пятница
::7 - Суббота
:: День недели бэкап которого считается недельным
SET "WEEK_DAY_BACKUP=1"
:: Бэкап последнего числа месяца считается месячным
:: Бэкап последнего числа года считается годовым
:: Количество хранимых страховых копий по типам
SET "REZERV_DAY=6"
SET "REZERV_WEEK=5"
SET "REZERV_MONTH=11"
SET "REZERV_YEAR=50"
:: ПРИМЕЧАНИЕ: имя архива будет иметь маску:
:: %SOURCE_NAME%_ГГГГ_ММ_ДД_%TYPE_BACKUP%.7z
ECHO.
ECHO %DATE% - %TIME:~0,5% Резервное копирование:
ECHO тело скрипта: "%~0"
ECHO список: "%BACKUP_LIST%"
CALL :BACKUP_PATHS
CALL :SYS_TYPE
CALL :DATE_SET
CALL :ARC
CALL :REZERV_TRIM
ENDLOCAL
GOTO :EOF
:SYS_TYPE
:: Определение разрядности системы для использования нужной версии архиватора
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "AMD64"&&SET "ARC_DIR=%~dp0X64"||SET "ARC_DIR=%~dp0X32"
:: Отбрасывание последнего символа "" в пути архиватора
SET "LAST_CHAR=%ARC_DIR:~-1%"
IF "%LAST_CHAR%"=="" SET "ARC_DIR=%ARC_DIR:~0,-1%"
IF NOT EXIST "%ARC_DIR%7z.exe" (
ECHO Не обнаружен архиватор по пути "%ARC_DIR%"!
ECHO Положите соответсвующую версию 7z.exe по пути .X64 или .X86 и перезапустите скрипт!
CALL :ERROR 1
)
GOTO :EOF
:BACKUP_PATHS
:: Отбрасывание последнего символа "" в пути бэкапа
SET "LAST_CHAR=%BACKUP_DIR:~-1%"
IF "%LAST_CHAR%"=="" SET "BACKUP_DIR=%BACKUP_DIR:~0,-1%"
:: Создание целевой папки для резервного копирования с проверкой существования
IF NOT EXIST "%BACKUP_DIR%" MD "%BACKUP_DIR%"
IF NOT EXIST "%BACKUP_DIR%" (
ECHO Указанная папка для создания копии недоступна!
CALL :ERROR 2
)
ECHO Резервная копия будет создана в папке %BACKUP_DIR%
GOTO :EOF
:DATE_SET
:: Определение параметров текущей даты и типа бэкапа
ECHO wscript.ECHO YEAR(DATE)^&"_"^&RIGHT(0^&MONTH(DATE),2)^&"_"^&RIGHT(0^&DAY(DATE),2)^&"_"^& DAY(DATESERIAL(YEAR(DATE),MONTH(DATE)+1,1-1))^&"_"^&WEEKDAY(DATE)^&"_"^&RIGHT(0^&hour(TIME),2)^&"_"^&RIGHT(0^&minute(TIME),2) 1>"%TEMP%tmp.vbs"
FOR /F "TOKENS=1,2,3,4,5,6,7 DELIMS=_" %%a IN ('cscript "%TEMP%tmp.vbs" //Nologo') DO SET "TEK_YEAR=%%a"&SET "TEK_MONTH=%%b"&SET "TEK_DAY=%%c"&SET "LAST_DAY=%%d"&SET "TEK_WEEK=%%e"&SET "TEK_HOUR=%%f"&SET "TEK_MINUTE=%%g"
IF EXIST "%TEMP%tmp.vbs" DEL "%TEMP%tmp.vbs"
SET "TYPE_BACKUP=DAY"
IF "%WEEK_DAY_BACKUP%"=="%TEK_WEEK%" SET "TYPE_BACKUP=WEEK"
IF "%TEK_DAY%"=="%LAST_DAY%" SET "TYPE_BACKUP=MONTH"
IF "%TEK_MONTH%"=="12" (IF "%TEK_DAY%"=="%LAST_DAY%" (SET "TYPE_BACKUP=YEAR"))
CALL SET "REZERV_NUM=%%REZERV_%TYPE_BACKUP%%%"
SET "ARC_NAME=%SOURCE_NAME%_%TEK_YEAR%_%TEK_MONTH%_%TEK_DAY%~%TYPE_BACKUP%"
IF EXIST "%BACKUP_DIR%%ARC_NAME%.7z" (
ECHO Резервная копия за этот день уже создана!
ECHO Удалите или переименуйте ее и запустите скрипт повторно!
CALL :ERROR 3
)
GOTO :EOF
:ARC
IF EXIST "%ARC_DIR%7z.exe" (
1>nul "%ARC_DIR%7z.exe" a -t7z "%BACKUP_DIR%%ARC_NAME%.7z" @"%BACKUP_LIST%" -ms -mmt -mx7 -bd -scs%LIST_CHARSET% -ssw
ECHO Страховая копия создана...
)
GOTO :EOF
:REZERV_TRIM
ECHO Удалены устаревшие резервные копии:
FOR /F "SKIP=%REZERV_NUM% USEBACKQ TOKENS=1 DELIMS=" %%a IN (`DIR /O:-N /B "%BACKUP_DIR%%SOURCE_NAME%_20??_??_??~%TYPE_BACKUP%.7z"`) DO (
DEL /Q /F "%BACKUP_DIR%%%a"
ECHO "%BACKUP_DIR%%%a"
)
GOTO :EOF
:ERROR
ECHO Произошло досадное недоразумение - резервная копия не создана ...
ENDLOCAL
EXIT %~1

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

  • Блог пользователя yurkesha

Чтение данных из реестра в переменную окружения

Продвинутый кросплатформенный модуль для встраивания в скрипты, позволяющий в удобной форме получать данные из реестра для дальнейшего использования(как всегда — кодировка скрипта CP866):

@ECHO OFF
CLS
:: 1-й параметр = раздел реестра для чтения
:: 2-й параметр = имя считываемого параметра - указать пустые кавычки для чтения параметра "По умолчанию"
:: 3-й параметр = имя переменной окружения куда считываем результат
:: Пример чтения именованного параметра:
CALL :REG_READ "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" "USERINIT" "MY_VAR1"
ECHO Именованный параметр значение "%MY_VAR1%"
ECHO Именованный параметр тип "%MY_VAR1_TYPE%"
:: Пример чтения безымянного параметра "По умолчанию"
CALL :REG_READ "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" "" "MY_VAR2"
ECHO Параметр "По умолчанию" значение "%MY_VAR2%"
ECHO Параметр "По умолчанию" тип "%MY_VAR2_TYPE%"
GOTO :EOF
:REG_READ
IF NOT "%~2"=="" (
FOR /F "USEBACKQ TOKENS=* DELIMS=" %%a IN (`REG QUERY "%~1" /v "%~2" 2^>NUL ^|FINDSTR /I /B /C:" %~2" 2^>NUL`) DO CALL :TRANSLATE "%%a" "%~2" "%~3"
1>NUL 2>&1 REG QUERY "%~1" /v "%~2"||(SET "%~3_TYPE="&SET "%~3=!")
)
IF "%~2"=="" (
FOR /F "USEBACKQ TOKENS=* DELIMS=" %%a IN (`REG QUERY "%~1" /ve 2^>NUL ^|FINDSTR /B /C:" " 2^>NUL`) DO CALL :TRANSLATE "%%a" "" "%~3"
1>NUL 2>&1 REG QUERY "%~1" /ve||(SET "%~3_TYPE="&SET "%~3=!")
)
CALL SET "%~3=%%%~3:~0,-1%%"
GOTO :EOF
:TRANSLATE
SET "TEMP_STR=%~1"
IF NOT "%~2"=="" CALL SET "TEMP_STR=%%TEMP_STR:*%~2=%%"
CALL SET "TEMP_STR=%%TEMP_STR:*REG_=%%"
FOR /F "USEBACKQ TOKENS=1*" %%a IN ('"%TEMP_STR%"') DO (
SET "%~3_TYPE=REG_%%~a"
SET "%~3=%%~b"
)
GOTO :EOF

Добавлена возможность чтения из реестра параметра «По-умолчанию».
Проверена работа на WinXP, Win7, Win7x64.

Предполагается что будет корректно работать на всех системах начиная с WinXP и до Win8 включительно.
Не учитывается  ненативный запуск — то есть если на x64 вызвать cmd-скрипт из x86-окружения то подмена HKLMSOFTWARE на HKLMSOFTWAREWow6432Node произойдет без вашего желания. Прямой же запуск скрипта ВСЕГДА отрабатывает в нативном окружении.

ЗЫ — Что делать с «(значение параметра не задано)» на системах Win7(судя по всему Vista и старше) для пустого параметра «По умолчанию» я пока в универсальном виде не придумал. Такое значение автоматически присваивается неописанному пустому параметру и, к сожалению, оно зависимо от языка системы.

  • Блог пользователя yurkesha

Перейти к содержимому

Довольно часто мне задают вопрос о том, как запустить скрипт через консоль Windows. Многие запускают скрипты двойным кликом и не могут понять, почему скрипт прекращает свою работу. Поэтому решил написать небольшую инструкцию по запуску Perl-скриптов через консоль.

Как запустить консоль:

1. Пуск->Выполнить

2. Ввести «cmd» и нажать Enter

Появится подобное окно

Консоль поддерживает множество команд — ntcmds

Однако, для того, чтобы запустить скрипт, достаточно уметь пользоваться одной — cd.

Как запустить скрипт:

Предположим, на диске C: есть директория script, и в ней лежит скрипт test.pl.
Для того, чтобы его запустить, требуется предварительно перейти в директорию со скриптом, набрав в консоли:

cd c:script

и нажать Enter. На экране отобразится нечто подобное:

Теперь нужно ввести имя скрипта (test.pl) и нажать Enter:

Если скрипт не запустился, и консоль выдала подобный текст:

"test.pl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

или

'test.pl' is not recognized as an internal or external command,
operable program or batch file.

То запускать придется так:

c:perlbinperl.exe test.pl

c:perlbinperl.exe — путь до интерпретатора Perl, test.pl — запускаемый скрипт. Естественно, у вас в системе должен стоять ActivePerl или какой-нибудь другой интерпретатор.

Надеюсь, теперь мне перестанут задавать вопросы про консоль.

Пакетный скрипт – Обзор

Пакетный сценарий включен для автоматизации последовательностей команд, которые повторяются по своей природе. Сценарии – это способ, с помощью которого можно облегчить эту необходимость, автоматизируя эти последовательности команд, чтобы упростить свою жизнь в оболочке и сделать ее более продуктивной. В большинстве организаций Batch Script так или иначе включен для автоматизации вещей.

Некоторые функции пакетного скрипта –

  • Может читать входные данные пользователей, чтобы их можно было обрабатывать дальше.

  • Имеет управляющие структуры, например, для переключения, для лучшей автоматизации и написания сценариев.

  • Поддерживает расширенные функции, такие как функции и массивы.

  • Поддерживает регулярные выражения.

  • Может включать в себя другие программные коды, такие как Perl.

Может читать входные данные пользователей, чтобы их можно было обрабатывать дальше.

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

Поддерживает расширенные функции, такие как функции и массивы.

Поддерживает регулярные выражения.

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

Некоторые из наиболее часто используемых пакетных сценариев –

  • Настройка серверов для разных целей.

  • Автоматизация служебных операций, таких как удаление ненужных файлов или файлов журналов.

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

  • Установка программ на разных машинах одновременно.

Настройка серверов для разных целей.

Автоматизация служебных операций, таких как удаление ненужных файлов или файлов журналов.

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

Установка программ на разных машинах одновременно.

Пакетные сценарии хранятся в простых текстовых файлах, содержащих строки с командами, которые выполняются последовательно, одна за другой. Эти файлы имеют специальное расширение BAT или CMD. Файлы этого типа распознаются и выполняются через интерфейс (иногда называемый оболочкой), предоставляемый системным файлом, называемым интерпретатором команд. В системах Windows этот интерпретатор известен как cmd.exe.

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

:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR

Пакетный скрипт – Окружающая среда

В этой главе описывается среда, связанная с Batch Script.

Написание и выполнение

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

Ниже приведены различные способы запуска cmd.exe –

Способ 1. Перейдите в C: Windows System32 и дважды щелкните файл cmd.

Написание исполняющего метода1

Способ 2 – с помощью команды запуска – следующий снимок показывает, чтобы найти командную строку (cmd.exe) на Windows Server 2012.

Написание исполняющего метода2

После запуска cmd.exe вы увидите следующий экран. Это будет ваша среда для выполнения ваших пакетных сценариев.

Пакетная среда сценариев

Переменные среды

Чтобы запустить пакетные файлы из командной строки, вам нужно либо перейти в папку, в которой хранится пакетный файл, либо вы можете указать местоположение файла в переменной среды path. Таким образом, предполагая, что пакетный файл хранится в папке C:Applicationbin , вам нужно будет следовать этим инструкциям для включения переменной PATH.

Операционные системы Выход
Windows Добавить строку; C:Applicationbin до конца системной переменной PATH.

Пакетный скрипт – Команды

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

S.No Команды и описание
1 VER

Эта пакетная команда показывает версию MS-DOS, которую вы используете.

2 ASSOC

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

3 CD

Эта пакетная команда помогает вносить изменения в другой каталог или отображает текущий каталог.

4 ЦБС

Эта пакетная команда очищает экран.

5 COPY

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

6 DEL

Эта пакетная команда удаляет файлы, а не каталоги.

7 DIR

Эта пакетная команда выводит содержимое каталога.

8 ДАТА

Эта пакетная команда поможет найти системную дату.

9 ECHO

Эта пакетная команда отображает сообщения или включает или выключает отображение команды.

10 ВЫХОД

Эта пакетная команда выходит из консоли DOS.

11 Мэриленд

Эта пакетная команда создает новый каталог в текущем местоположении.

12 ПЕРЕЕХАТЬ

Эта пакетная команда перемещает файлы или каталоги между каталогами.

13 ДОРОЖКА

Эта пакетная команда отображает или устанавливает переменную пути.

14 ПАУЗА

Эта пакетная команда запрашивает пользователя и ожидает ввода строки ввода.

15 НЕЗАМЕДЛИТЕЛЬНЫЙ

Эта пакетная команда может использоваться для изменения или сброса приглашения cmd.exe.

16 RD

Эта пакетная команда удаляет каталоги, но каталоги должны быть пустыми, прежде чем их можно будет удалить.

17 REN

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

18 REM

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

19 НАЧНИТЕ

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

20 ВРЕМЯ

Эта пакетная команда устанавливает или отображает время.

21 ТИП

Эта пакетная команда печатает содержимое файла или файлов на выход.

22 VOL

Эта пакетная команда отображает метки тома.

23 ATTRIB

Отображает или устанавливает атрибуты файлов в текущем каталоге

24 CHKDSK

Эта пакетная команда проверяет диск на наличие проблем.

25 ВЫБОР

Эта пакетная команда предоставляет пользователю список параметров.

26 CMD

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

27 КОМП

Эта пакетная команда сравнивает 2 файла в зависимости от размера файла.

28 ПЕРЕРАБАТЫВАТЬ

Эта пакетная команда преобразует том из файловой системы FAT16 или FAT32 в файловую систему NTFS.

29 DRIVERQUERY

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

30 Увеличить

Эта пакетная команда извлекает файлы из сжатых CAB-файлов.

31 НАХОДИТЬ

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

32 ФОРМАТ

Эта пакетная команда форматирует диск для использования файловой системы, поддерживаемой Windows, такой как FAT, FAT32 или NTFS, тем самым перезаписывая предыдущее содержимое диска.

33 ПОМОГИТЕ

Эта пакетная команда показывает список предоставленных Windows команд.

34 IPCONFIG

Эта пакетная команда отображает Windows IP Configuration. Показывает конфигурацию по соединению и имя этого соединения.

35 ЭТИКЕТКА

Эта пакетная команда добавляет, устанавливает или удаляет метку диска.

36 БОЛЬШЕ

Эта пакетная команда отображает содержимое файла или файлов, по одному экрану за раз.

37 СЕТЬ

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

38 ПИНГ

Эта пакетная команда отправляет пакеты ICMP / IP «эхо» по сети на указанный адрес.

39 НЕИСПРАВНОСТЬ

Эта пакетная команда выключает компьютер или выходит из системы текущего пользователя.

40 СОРТИРОВАТЬ

Эта пакетная команда берет входные данные из исходного файла и сортирует их содержимое в алфавитном порядке, от A до Z или от Z до A. Она печатает выходные данные на консоли.

41 SUBST

Эта пакетная команда назначает букву диска локальной папке, отображает текущие назначения или удаляет назначение.

42 СИСТЕМНАЯ ИНФОРМАЦИЯ

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

43 Taskkill

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

44 СПИСОК ЗАДАНИЙ

Эта пакетная команда выводит список задач, включая имя задачи и идентификатор процесса (PID).

45 XCOPY

Эта пакетная команда копирует файлы и каталоги более сложным способом.

46 ДЕРЕВО

Эта пакетная команда отображает дерево всех подкаталогов текущего каталога до любого уровня рекурсии или глубины.

47 FC

Эта пакетная команда перечисляет фактические различия между двумя файлами.

48 DISKPART

Эта пакетная команда показывает и настраивает свойства разделов диска.

49 ЗАГЛАВИЕ

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

50 ЗАДАВАТЬ

Отображает список переменных среды в текущей системе.

Эта пакетная команда показывает версию MS-DOS, которую вы используете.

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

Эта пакетная команда помогает вносить изменения в другой каталог или отображает текущий каталог.

Эта пакетная команда очищает экран.

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

Эта пакетная команда удаляет файлы, а не каталоги.

Эта пакетная команда выводит содержимое каталога.

Эта пакетная команда поможет найти системную дату.

Эта пакетная команда отображает сообщения или включает или выключает отображение команды.

Эта пакетная команда выходит из консоли DOS.

Эта пакетная команда создает новый каталог в текущем местоположении.

Эта пакетная команда перемещает файлы или каталоги между каталогами.

Эта пакетная команда отображает или устанавливает переменную пути.

Эта пакетная команда запрашивает пользователя и ожидает ввода строки ввода.

Эта пакетная команда может использоваться для изменения или сброса приглашения cmd.exe.

Эта пакетная команда удаляет каталоги, но каталоги должны быть пустыми, прежде чем их можно будет удалить.

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

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

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

Эта пакетная команда устанавливает или отображает время.

Эта пакетная команда печатает содержимое файла или файлов на выход.

Эта пакетная команда отображает метки тома.

Отображает или устанавливает атрибуты файлов в текущем каталоге

Эта пакетная команда проверяет диск на наличие проблем.

Эта пакетная команда предоставляет пользователю список параметров.

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

Эта пакетная команда сравнивает 2 файла в зависимости от размера файла.

Эта пакетная команда преобразует том из файловой системы FAT16 или FAT32 в файловую систему NTFS.

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

Эта пакетная команда извлекает файлы из сжатых CAB-файлов.

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

Эта пакетная команда форматирует диск для использования файловой системы, поддерживаемой Windows, такой как FAT, FAT32 или NTFS, тем самым перезаписывая предыдущее содержимое диска.

Эта пакетная команда показывает список предоставленных Windows команд.

Эта пакетная команда отображает Windows IP Configuration. Показывает конфигурацию по соединению и имя этого соединения.

Эта пакетная команда добавляет, устанавливает или удаляет метку диска.

Эта пакетная команда отображает содержимое файла или файлов, по одному экрану за раз.

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

Эта пакетная команда отправляет пакеты ICMP / IP «эхо» по сети на указанный адрес.

Эта пакетная команда выключает компьютер или выходит из системы текущего пользователя.

Эта пакетная команда берет входные данные из исходного файла и сортирует их содержимое в алфавитном порядке, от A до Z или от Z до A. Она печатает выходные данные на консоли.

Эта пакетная команда назначает букву диска локальной папке, отображает текущие назначения или удаляет назначение.

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

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

Эта пакетная команда выводит список задач, включая имя задачи и идентификатор процесса (PID).

Эта пакетная команда копирует файлы и каталоги более сложным способом.

Эта пакетная команда отображает дерево всех подкаталогов текущего каталога до любого уровня рекурсии или глубины.

Эта пакетная команда перечисляет фактические различия между двумя файлами.

Эта пакетная команда показывает и настраивает свойства разделов диска.

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

Отображает список переменных среды в текущей системе.

Пакетный скрипт – Файлы

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

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

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

:: Deletes All files in the Current Directory With Prompts and Warnings 
::(Hidden, System, and Read-Only Files are Not Affected) 
:: 
@ECHO OFF 
DEL . 
DR

Сохранение командных файлов

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

  • Старайтесь избегать пробелов при именовании командных файлов, это иногда создает проблемы, когда они вызываются из других скриптов.

  • Не называйте их по имени общих пакетных файлов, которые доступны в системе, таких как ping.cmd.

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

Не называйте их по имени общих пакетных файлов, которые доступны в системе, таких как ping.cmd.

Сохранение командных файлов

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

  • Не забудьте поставить .bat или .cmd в конце имени файла.
  • Выберите опцию «Сохранить как тип» как «Все файлы».
  • Поместите все имя файла в кавычки «».

Выполнение пакетных файлов

Ниже приведены шаги для выполнения командного файла –

  • Шаг 1 – Откройте командную строку (cmd.exe).

  • Шаг 2 – Перейдите в место, где хранятся файлы .bat или .cmd.

  • Шаг 3. Запишите имя файла, как показано на следующем рисунке, и нажмите кнопку «Ввод», чтобы запустить пакетный файл.

Шаг 1 – Откройте командную строку (cmd.exe).

Шаг 2 – Перейдите в место, где хранятся файлы .bat или .cmd.

Шаг 3. Запишите имя файла, как показано на следующем рисунке, и нажмите кнопку «Ввод», чтобы запустить пакетный файл.

Выполнение пакетных файлов

Модификация пакетных файлов

Ниже приведены шаги для изменения существующего командного файла.

  • Шаг 1 – Откройте проводник Windows.

  • Шаг 2 – Перейдите в место, где хранятся файлы .bat или .cmd.

  • Шаг 3 – Щелкните правой кнопкой мыши файл и выберите пункт «Редактировать» в контекстном меню. Файл откроется в Блокноте для дальнейшего редактирования.

Шаг 1 – Откройте проводник Windows.

Шаг 2 – Перейдите в место, где хранятся файлы .bat или .cmd.

Шаг 3 – Щелкните правой кнопкой мыши файл и выберите пункт «Редактировать» в контекстном меню. Файл откроется в Блокноте для дальнейшего редактирования.

Модификация пакетных файлов

Пакетный скрипт – Синтаксис

Обычно первая строка в пакетном файле часто состоит из следующей команды.

ECHO Command

@echo off

По умолчанию командный файл будет отображать свою команду во время работы. Цель этой первой команды – отключить этот дисплей. Команда «echo off» отключает отображение всего сценария, кроме самой команды «echo off». Знак “@” перед “@” заставляет команду также применяться к себе.

Документация

Очень часто пакетные файлы также содержат строки, начинающиеся с команды «Rem». Это способ ввода комментариев и документации. Компьютер игнорирует что-либо в строке, следующей за Rem. Для пакетных файлов с возрастающей сложностью часто бывает полезно оставлять комментарии.

Первая пакетная сценарий

Давайте создадим нашу простую программу первого пакетного сценария. Откройте блокнот и введите следующие строки кода. Сохраните файл как «List.cmd».

Код делает следующее –

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

  • Команда Rem используется для добавления комментария, чтобы сказать, что именно делает этот пакетный файл.

  • Команда dir используется для получения содержимого папки C: Program Files.

  • Команда ‘>’ используется для перенаправления вывода в файл C: lists.txt.

  • Наконец, команда echo используется, чтобы сообщить пользователю, что операция завершена.

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

Команда Rem используется для добавления комментария, чтобы сказать, что именно делает этот пакетный файл.

Команда dir используется для получения содержимого папки C: Program Files.

Команда ‘>’ используется для перенаправления вывода в файл C: lists.txt.

Наконец, команда echo используется, чтобы сообщить пользователю, что операция завершена.

@echo off 
Rem This is for listing down all the files in the directory Program files 
dir "C:Program Files" > C:lists.txt 
echo "The program has completed"

После выполнения вышеуказанной команды имена файлов в C: Program Files будут отправлены в файл C: Lists.txt, а в командной строке отобразится сообщение «Программа завершена».

Пакетный скрипт – Переменные

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

Аргументы командной строки

Пакетные сценарии поддерживают концепцию аргументов командной строки, в которой аргументы могут быть переданы в пакетный файл при вызове. Аргументы можно вызывать из пакетных файлов через переменные% 1,% 2,% 3 и т. Д.

В следующем примере показан командный файл, который принимает 3 аргумента командной строки и выводит их на экран командной строки.

@echo off 
echo %1 
echo %2 
echo %3

Если вышеуказанный пакетный скрипт хранится в файле с именем test.bat, и мы должны были запустить пакет как

Test.bat 1 2 3

Ниже приведен скриншот того, как это будет выглядеть в командной строке при выполнении командного файла.

Аргументы командной строки

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

1 
2 
3

Если бы мы запускали партию как

Example 1 2 3 4

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

Установить команду

Другой способ инициализации переменных – команда set. Ниже приводится синтаксис команды set.

Синтаксис

set /A variable-name=value

где,

  • имя-переменной – это имя переменной, которую вы хотите установить.

  • значение – это значение, которое необходимо установить для переменной.

  • / A – этот переключатель используется, если значение должно иметь числовой характер.

имя-переменной – это имя переменной, которую вы хотите установить.

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

/ A – этот переключатель используется, если значение должно иметь числовой характер.

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

пример

@echo off 
set message=Hello World 
echo %message%
  • В приведенном выше фрагменте кода переменная с именем message определяется и устанавливается со значением «Hello World».

  • Чтобы отобразить значение переменной, обратите внимание, что переменная должна быть заключена в знак%.

В приведенном выше фрагменте кода переменная с именем message определяется и устанавливается со значением «Hello World».

Чтобы отобразить значение переменной, обратите внимание, что переменная должна быть заключена в знак%.

Выход

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

Hello World

Работа с числовыми значениями

В пакетном скрипте также можно определить переменную для хранения числового значения. Это можно сделать с помощью переключателя / A.

В следующем коде показан простой способ задания числовых значений с помощью переключателя / A.

@echo off 
SET /A a = 5 
SET /A b = 10 
SET /A c = %a% + %b% 
echo %c%
  • Сначала мы устанавливаем значение 2 переменных, a и b, равным 5 и 10 соответственно.

  • Мы добавляем эти значения и сохраняем в переменной c.

  • Наконец, мы отображаем значение переменной c.

Сначала мы устанавливаем значение 2 переменных, a и b, равным 5 и 10 соответственно.

Мы добавляем эти значения и сохраняем в переменной c.

Наконец, мы отображаем значение переменной c.

Результат вышеупомянутой программы будет 15.

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

@echo off 
SET /A a = 5 
SET /A b = 10 
SET /A c = %a% + %b% 
echo %c% 
SET /A c = %a% - %b% 
echo %c% 
SET /A c = %b% / %a% 
echo %c% 
SET /A c = %b% * %a% 
echo %c%

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

15 
-5 
2 
50

Локальные и глобальные переменные

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

В сценариях DOS также есть определение для локальных и глобальных переменных. По умолчанию переменные являются глобальными для всего сеанса командной строки. Вызовите команду SETLOCAL, чтобы сделать переменные локальными для области действия вашего скрипта. После вызова SETLOCAL любые переменные возвращаются после вызова ENDLOCAL, вызова EXIT или когда выполнение достигает конца файла (EOF) в вашем сценарии. В следующем примере показано различие, когда в сценарии установлены локальные и глобальные переменные.

пример

@echo off 
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL

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

  • «Globalvar» определен с глобальной областью действия и доступен по всему сценарию.

  • Переменная ‘var’ определена в локальной области видимости, потому что она заключена между блоками ‘SETLOCAL’ и ‘ENDLOCAL’. Следовательно, эта переменная будет уничтожена, как только будет выполнен оператор ENDLOCAL.

«Globalvar» определен с глобальной областью действия и доступен по всему сценарию.

Переменная ‘var’ определена в локальной области видимости, потому что она заключена между блоками ‘SETLOCAL’ и ‘ENDLOCAL’. Следовательно, эта переменная будет уничтожена, как только будет выполнен оператор ENDLOCAL.

Выход

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

13150
5

Вы заметите, что команда echo% var% ничего не даст, потому что после оператора ENDLOCAL переменная ‘var’ больше не будет существовать.

Работа с переменными среды

Если у вас есть переменные, которые будут использоваться в пакетных файлах, то всегда предпочтительнее использовать переменные среды. Как только переменная среды определена, к ней можно получить доступ через знак%. В следующем примере показано, как увидеть JAVA_HOME, определенный в системе. Переменная JAVA_HOME является ключевым компонентом, который обычно используется широким спектром приложений.

@echo off 
echo %JAVA_HOME%

Вывод покажет каталог JAVA_HOME, который будет зависеть от системы к системе. Ниже приведен пример вывода.

C:AtlassianBitbucket4.0.1jre

Пакетный скрипт – Комментарии

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

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

ECHO OFF 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
ECHO.%* | FIND "?" >NUL 
IF NOT ERRORLEVEL 1 GOTO Syntax 
IF NOT [%2]==[] GOTO Syntax 
SETLOCAL 
SET WSS= 
IF NOT [%1]==[] FOR /F "tokens = 1 delims =  " %%A IN ('ECHO.%~1') DO SET WSS = %%A 
FOR /F "tokens = 1 delims =  " %%a IN ('NET VIEW ^| FIND /I "\%WSS%"') DO FOR /F 
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND "<03>"') 
DO ECHO.%%a %%A 
ENDLOCAL 
GOTO:EOF 
ECHO Display logged on users and their workstations. 
ECHO Usage: ACTUSR [ filter ] 
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part 
of the computer name^(s^) to be displayed

Комментарии с использованием оператора Rem

Есть два способа создания комментариев в Batch Script; один через команду Rem. Любой текст, следующий за оператором Rem, будет рассматриваться как комментарий и не будет выполняться. Ниже приводится общий синтаксис этого утверждения.

Синтаксис

Rem Remarks

где «Замечания» – это комментарии, которые необходимо добавить.

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

пример

@echo off 
Rem This program just displays Hello World 
set message=Hello World 
echo %message%

Выход

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

Hello World

Комментарии, используя :: Заявление

Другой способ создания комментариев в Batch Script – через команду ::. Любой текст, следующий за оператором ::, будет рассматриваться как комментарий и не будет выполнен. Ниже приводится общий синтаксис этого утверждения.

Синтаксис

:: Remarks

где «Замечания» – это комментарий, который необходимо добавить.

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

пример

@echo off 
:: This program just displays Hello World 
set message = Hello World 
echo %message%

Выход

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

Hello World

Примечание. Если у вас слишком много строк Rem, это может замедлить выполнение кода, потому что в конце каждая строка кода в командном файле все равно должна быть выполнена.

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

::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF 
:: Windows version check 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
ECHO.%* | FIND "?" >NUL 
:: Command line parameter check 
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax 
:: Keep variable local 
SETLOCAL 
:: Initialize variable 
SET WSS= 
:: Parse command line parameter 
IF NOT [%1]==[] FOR /F "tokens = 1 delims =  " %%A IN ('ECHO.%~1') DO SET WSS = %%A 
:: Use NET VIEW and NBTSTAT to find computers and logged on users 
FOR /F "tokens = 1 delims =  " %%a IN ('NET VIEW ^| FIND /I "\%WSS%"') DO FOR /F 
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND 
"<03>"') DO ECHO.%%a %%A 
:: Done 
ENDLOCAL
GOTO:EOF 
:Syntax 
ECHO Display logged on users and their workstations. 
ECHO Usage: ACTUSR [ filter ] 
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the 
computer name^(s^) to be displayed

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

Пакетный скрипт – Строки

В DOS строка представляет собой упорядоченную коллекцию символов, например «Hello, World!».

S.No Строки и описание
1 Создать строку

Строка может быть создана в DOS следующим образом.

2 Пустой строки

Пустой строки

3 Строковая интерполяция

Строковая интерполяция – это способ создания нового значения String из набора констант, переменных, литералов и выражений путем включения их значений в строковый литерал.

4 Конкатенация строк

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

5 Длина строки

В сценариях DOS не определена функция длины для определения длины строки. Существуют пользовательские функции, которые можно использовать для одного и того же. Ниже приведен пример пользовательской функции для определения длины строки.

6 toInt

Переменная, которая была установлена ​​как строка с использованием переменной set, может быть преобразована в целое число с помощью переключателя / A, который использует переменную set. В следующем примере показано, как это можно сделать.

7 Выровнять право

Это используется для выравнивания текста вправо, что обычно используется для улучшения читаемости числовых столбцов.

8 Левая строка

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

9 Mid String

Это используется для извлечения подстроки через положение символов в строке.

10 Удалить

Функция подстановки строк также может быть использована для удаления подстроки из другой строки.

11 Удалить оба конца

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

12 Удалить все пробелы

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

13 Заменить строку

Чтобы заменить подстроку другой строкой, используйте функцию подстановки строк.

14 Правая строка

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

Строка может быть создана в DOS следующим образом.

Пустой строки

Строковая интерполяция – это способ создания нового значения String из набора констант, переменных, литералов и выражений путем включения их значений в строковый литерал.

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

В сценариях DOS не определена функция длины для определения длины строки. Существуют пользовательские функции, которые можно использовать для одного и того же. Ниже приведен пример пользовательской функции для определения длины строки.

Переменная, которая была установлена ​​как строка с использованием переменной set, может быть преобразована в целое число с помощью переключателя / A, который использует переменную set. В следующем примере показано, как это можно сделать.

Это используется для выравнивания текста вправо, что обычно используется для улучшения читаемости числовых столбцов.

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

Это используется для извлечения подстроки через положение символов в строке.

Функция подстановки строк также может быть использована для удаления подстроки из другой строки.

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

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

Чтобы заменить подстроку другой строкой, используйте функцию подстановки строк.

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

Пакетный скрипт – Массивы

Массивы не определены как тип в пакетном скрипте, но могут быть реализованы. Следующие вещи необходимо отметить, когда массивы реализованы в Batch Script.

  • Каждый элемент массива должен быть определен командой set.
  • Цикл ‘for’ потребуется для перебора значений массива.

Создание массива

Массив создается с помощью следующей команды set.

set a[0]=1

Где 0 – индекс массива, а 1 – значение, присвоенное первому элементу массива.

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

пример

@echo off 
set list = 1 2 3 4 
(for %%a in (%list%) do ( 
   echo %%a 
))

Выход

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

1
2
3
4

Доступ к массивам

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

пример

@echo off 
set a[0]=1 
echo %a[0]%

В этом примере индекс начинается с 0, что означает, что к первому элементу можно получить доступ, используя индекс как 0, ко второму элементу можно получить доступ, используя индекс как 1, и так далее. Давайте проверим следующий пример для создания, инициализации и доступа к массивам –

@echo off
set a[0] = 1 
set a[1] = 2 
set a[2] = 3 
echo The first element of the array is %a[0]% 
echo The second element of the array is %a[1]% 
echo The third element of the array is %a[2]%

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

The first element of the array is 1 
The second element of the array is 2 
The third element of the array is 3

Модификация массива

Чтобы добавить элемент в конец массива, вы можете использовать элемент set вместе с последним индексом элемента массива.

пример

@echo off 
set a[0] = 1  
set a[1] = 2  
set a[2] = 3 
Rem Adding an element at the end of an array 
Set a[3] = 4 
echo The last element of the array is %a[3]%

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

The last element of the array is 4

Вы можете изменить существующий элемент массива, назначив новое значение по заданному индексу, как показано в следующем примере:

@echo off 
set a[0] = 1 
set a[1] = 2  
set a[2] = 3 
Rem Setting the new value for the second element of the array 
Set a[1] = 5 
echo The new value of the second element of the array is %a[1]%

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

The new value of the second element of the array is 5

Итерация по массиву

Итерация по массиву достигается с помощью цикла for и прохождения каждого элемента массива. В следующем примере показан простой способ реализации массива.

@echo off 
setlocal enabledelayedexpansion 
set topic[0] = comments 
set topic[1] = variables 
set topic[2] = Arrays 
set topic[3] = Decision making 
set topic[4] = Time and date 
set topic[5] = Operators 

for /l %%n in (0,1,5) do ( 
   echo !topic[%%n]! 
)

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Каждый элемент массива должен быть специально определен с помощью команды set.

  • Цикл for с параметром / L для перемещения по диапазонам используется для перебора массива.

Каждый элемент массива должен быть специально определен с помощью команды set.

Цикл for с параметром / L для перемещения по диапазонам используется для перебора массива.

Выход

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

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

Длина массива

Длина массива определяется путем итерации по списку значений в массиве, поскольку нет прямой функции для определения количества элементов в массиве.

@echo off 
set Arr[0] = 1 
set Arr[1] = 2 
set Arr[2] = 3 
set Arr[3] = 4 
set "x = 0" 
:SymLoop 

if defined Arr[%x%] ( 
   call echo %%Arr[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%

Выход

Выходные данные Приведенная выше команда производит следующий вывод.

The length of the array is 4

Создание структур в массивах

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

пример

@echo off 
set len = 3 
set obj[0].Name = Joe 
set obj[0].ID = 1 
set obj[1].Name = Mark 
set obj[1].ID = 2 
set obj[2].Name = Mohan 
set obj[2].ID = 3 
set i = 0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name = %cur.Name% 
echo Value = %cur.ID% 
set /a i = %i%+1 
goto loop

В отношении приведенного выше кода необходимо отметить следующие ключевые моменты.

  • Каждая переменная, определенная с помощью команды set, имеет 2 значения, связанных с каждым индексом массива.

  • Переменная i установлена ​​в 0, так что мы можем перебрать структуру, длина массива которой равна 3.

  • Мы всегда проверяем условие того, равно ли значение i значению len, и если нет, мы перебираем код.

  • Мы можем получить доступ к каждому элементу структуры, используя обозначение obj [% i%].

Каждая переменная, определенная с помощью команды set, имеет 2 значения, связанных с каждым индексом массива.

Переменная i установлена ​​в 0, так что мы можем перебрать структуру, длина массива которой равна 3.

Мы всегда проверяем условие того, равно ли значение i значению len, и если нет, мы перебираем код.

Мы можем получить доступ к каждому элементу структуры, используя обозначение obj [% i%].

Выход

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

Name = Joe 
Value = 1 
Name = Mark 
Value = 2 
Name = Mohan 
Value = 3

Пакетный сценарий – принятие решений

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

S.No Строки и описание
1 Если заявление

Первое заявление о принятии решения – это утверждение «если».

2 If / else Заявление

Следующим оператором принятия решения является оператор If / else. Ниже приводится общая форма этого утверждения.

3 Вложенные заявления If

Иногда требуется иметь несколько операторов if, встроенных друг в друга. Ниже приводится общая форма этого утверждения.

Первое заявление о принятии решения – это утверждение «если».

Следующим оператором принятия решения является оператор If / else. Ниже приводится общая форма этого утверждения.

Иногда требуется иметь несколько операторов if, встроенных друг в друга. Ниже приводится общая форма этого утверждения.

Пакетный скрипт – Операторы

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

В пакетном скрипте возможны следующие типы операторов.

  • Арифметические операторы
  • Реляционные операторы
  • Логические операторы
  • Операторы присваивания
  • Битовые операторы

Арифметические Операторы

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

Показать пример

оператор Описание пример
+ Добавление двух операндов 1 + 2 даст 3
Вычитает второй операнд из первого 2 – 1 даст 1
* Умножение обоих операндов 2 * 2 даст 4
/ Разделение числителя по знаменателю 3/2 даст 1,5
% Оператор модуля и остаток после целочисленного деления 3% 2 даст 1

Операторы отношений

Реляционные операторы позволяют сравнивать объекты. Ниже представлены реляционные операторы.

Показать пример

оператор Описание пример
EQU Проверяет равенство между двумя объектами 2 экв 2 даст верный
NEQ Проверяет разницу между двумя объектами 3 NEQ 2 даст истинное
LSS Проверяет, является ли левый объект меньше правого операнда 2 LSS 3 даст правду
LEQ Проверяет, является ли левый объект меньше или равен правому операнду 2 LEQ 3 даст истинное
GTR Проверяет, является ли левый объект больше правого операнда 3 гтп 2 даст верный
GEQ Проверяет, является ли левый объект больше или равен правому операнду 3 GEQ 2 даст истинное

Логические Операторы

Логические операторы используются для оценки булевых выражений. Ниже приведены доступные логические операторы.

Пакетный язык оснащен полным набором булевых логических операторов, таких как AND, OR, XOR, но только для двоичных чисел. Также нет никаких значений ИСТИНА или ЛОЖЬ. Единственным логическим оператором, доступным для условий, является оператор NOT.

Показать пример

оператор Описание
А ТАКЖЕ Это логический оператор «и»
ИЛИ ЖЕ Это логический оператор «или»
НЕ Это логический оператор «не»

Операторы присваивания

Язык Batch Script также предоставляет операторы присваивания. Ниже приведены доступные операторы присваивания.

Показать пример

оператор Описание пример
+ = Это добавляет правый операнд к левому операнду и присваивает результат левому операнду

Set / A a = 5

а + = 3

Выход будет 8

знак равно Это вычитает правый операнд из левого операнда и присваивает результат левому операнду

Set / A a = 5

а – = 3

Выход будет 2

знак равно Это умножает правый операнд на левый операнд и присваивает результат левому операнду

Set / A a = 5

а * = 3

Выход будет 15

знак равно Это делит левый операнд с правым операндом и присваивает результат левому операнду

Set / A a = 6

а / = 3

Выход будет 2

знак равно Это берет модуль, используя два операнда и присваивает результат левому операнду

Set / A a = 5

% = 3

Выход будет 2

Set / A a = 5

а + = 3

Выход будет 8

Set / A a = 5

а – = 3

Выход будет 2

Set / A a = 5

а * = 3

Выход будет 15

Set / A a = 6

а / = 3

Выход будет 2

Set / A a = 5

% = 3

Выход будет 2

Битовые операторы

Побитовые операторы также возможны в пакетном скрипте. Ниже приведены доступные операторы.

Показать пример

оператор Описание
& Это побитовый оператор «и»
| Это побитовый оператор «или»
^ Это побитовый «xor» или Exclusive или оператор

Ниже приведена таблица истинности, демонстрирующая этих операторов.

п Q P & Q р | Q р ^ д
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Пакетный скрипт – ДАТА и ВРЕМЯ

Дата и время в сценариях DOS имеют следующие две основные команды для получения даты и времени системы.

ДАТА

Эта команда получает системную дату.

Синтаксис

DATE

пример

@echo off 
echo %DATE%

Выход

Текущая дата будет отображаться в командной строке. Например,

Mon 12/28/2015

ВРЕМЯ

Эта команда устанавливает или отображает время.

Синтаксис

TIME

пример

@echo off 
echo %TIME%

Выход

Текущее системное время будет отображаться. Например,

22:06:52.87

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

Дата в формате год-месяц-день

пример

@echo off 
echo/Today is: %year%-%month%-%day% 
goto :EOF 
setlocal ENABLEEXTENSIONS 
set t = 2&if "%date%z" LSS "A" set t = 1 

for /f "skip=1 tokens = 2-4 delims = (-)" %%a in ('echo/^|date') do ( 
   for /f "tokens = %t%-4 delims=.-/ " %%d in ('date/t') do ( 
      set %%a=%%d&set %%b=%%e&set %%c=%%f)) 
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF

Выход

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

Today is: 2015-12-30

Пакетный скрипт – ввод / вывод

Существует три универсальных «файла» для ввода с клавиатуры, печати текста на экране и ошибок печати на экране. Файл «Стандартный вход», известный как stdin , содержит входные данные для программы / скрипта. Файл «Standard Out», известный как stdout , используется для записи вывода для отображения на экране. Наконец, файл «Standard Err», известный как stderr , содержит любые сообщения об ошибках для отображения на экране.

На каждый из этих трех стандартных файлов, иначе называемых стандартными потоками, ссылаются с помощью чисел 0, 1 и 2. Stdin – это файл 0, stdout – это файл 1, а stderr – это файл 2.

Перенаправление вывода (Stdout и Stderr)

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

Dir C: > list.txt

В приведенном выше примере стандартный вывод команды Dir C: перенаправляется в файл list.txt.

Если вы добавите число 2 к фильтру перенаправления, он перенаправит stderr в файл lists.txt.

Dir C: 2> list.txt

Можно даже объединить потоки stdout и stderr, используя номер файла и префикс «&». Ниже приведен пример.

DIR C: > lists.txt 2>&1

Подавление вывода программы

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

Dir C: > NUL

STDIN

Чтобы работать с Stdin, вы должны использовать обходной путь для достижения этой цели. Это может быть сделано путем перенаправления собственного стандартного ввода командной строки, называемого CON.

В следующем примере показано, как можно перенаправить вывод в файл с именем lists.txt. После того, как вы выполните приведенную ниже команду, командная строка будет принимать все введенные пользователем данные, пока не получит символ EOF. Позже он отправляет все входные данные в файл lists.txt.

TYPE CON > lists.txt

Пакетный скрипт – Код возврата

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

Ниже приведены общий код выхода и их описание.

Код ошибки Описание
0 Программа успешно завершена.
1 Неверная функция. Указывает, что Action попытался выполнить нераспознанную команду в командной строке Windows cmd.exe.
2 Система не может найти указанный файл. Указывает, что файл не может быть найден в указанном месте.
3 Система не может найти указанный путь. Указывает, что указанный путь не может быть найден.
5 В доступе отказано. Указывает, что у пользователя нет прав доступа к указанному ресурсу.

9009

0x2331

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

221225495

0xC0000017

-1073741801

Недостаточно виртуальной памяти.

Это указывает на то, что в Windows не хватает памяти.

3221225786

0xC000013A

-1073741510

Приложение прекращено в результате CTRL + C. Указывает, что приложение было прекращено либо с помощью клавиш ввода CTRL + C или CTRL + Break, либо с помощью окна командной строки пользователя.

3221225794

0xc0000142

-1073741502

Приложение не удалось правильно инициализировать. Указывает, что приложение было запущено на рабочем столе, к которому у текущего пользователя нет прав доступа. Другая возможная причина – не удалось инициализировать gdi32.dll или user32.dll.

9009

0x2331

221225495

0xC0000017

-1073741801

Недостаточно виртуальной памяти.

Это указывает на то, что в Windows не хватает памяти.

3221225786

0xC000013A

-1073741510

3221225794

0xc0000142

-1073741502

Уровень ошибки

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

По умолчанию способ проверки на наличие ОШИБКИ находится через следующий код.

Синтаксис

IF %ERRORLEVEL% NEQ 0 ( 
   DO_Something 
)

Обычно используется команда EXIT / B% ERRORLEVEL% в конце пакетного файла, чтобы вернуть коды ошибок из пакетного файла.

EXIT / B в конце командного файла остановит выполнение командного файла.

Используйте EXIT / B <exitcodes> в конце пакетного файла для возврата пользовательских кодов возврата.

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

Давайте посмотрим на быстрый пример того, как проверить коды ошибок из командного файла.

пример

Давайте предположим, что у нас есть пакетный файл с именем Find.cmd, который имеет следующий код. В коде мы четко упомянули, что если мы не найдем файл lists.txt, то должны установить уровень ошибки равным 7. Точно так же, если мы видим, что переменная userprofile не определена, мы должны установить код уровня ошибки на 9.

if not exist c:lists.txt exit 7 
if not defined userprofile exit 9 
exit 0

Давайте предположим, что у нас есть еще один файл с именем App.cmd, который сначала вызывает Find.cmd. Теперь, если Find.cmd возвращает ошибку, в которой он устанавливает уровень ошибки больше 0, он завершает работу программы. В следующем пакетном файле после вызова Find.cnd он на самом деле проверяет, не превышает ли уровень ошибки больше 0.

Call Find.cmd

if errorlevel gtr 0 exit 
echo Successful completion

Выход

В приведенной выше программе мы можем использовать следующие сценарии:

  • Если файл c: lists.txt не существует, в выводе консоли ничего не будет отображаться.

  • Если переменная userprofile не существует, в выводе консоли ничего не будет отображаться.

  • Если оба вышеуказанных условия выполнены, в командной строке будет отображена строка «Успешное завершение».

Если файл c: lists.txt не существует, в выводе консоли ничего не будет отображаться.

Если переменная userprofile не существует, в выводе консоли ничего не будет отображаться.

Если оба вышеуказанных условия выполнены, в командной строке будет отображена строка «Успешное завершение».

Loops

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

S.No Петли и описание
1 При реализации заявления

В Batch Script нет прямого оператора while, но мы можем очень легко реализовать этот цикл, используя оператор if и метки.

2 Для заявления – список реализаций

Конструкция «FOR» предлагает возможности зацикливания для пакетных файлов. Ниже приведена общая конструкция оператора for для работы со списком значений.

3 Цикл по диапазонам

Оператор for также может перемещаться по диапазону значений. Ниже приводится общая форма заявления.

4 Классика для реализации цикла

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

В Batch Script нет прямого оператора while, но мы можем очень легко реализовать этот цикл, используя оператор if и метки.

Конструкция «FOR» предлагает возможности зацикливания для пакетных файлов. Ниже приведена общая конструкция оператора for для работы со списком значений.

Оператор for также может перемещаться по диапазону значений. Ниже приводится общая форма заявления.

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

Цикл по аргументам командной строки

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

пример

@ECHO OFF 
:Loop 

IF "%1"=="" GOTO completed 
FOR %%F IN (%1) DO echo %%F 
SHIFT 
GOTO Loop 
:completed

Выход

Давайте предположим, что приведенный выше код хранится в файле с именем Test.bat. Приведенная выше команда выдаст следующий вывод, если командный файл передает аргументы командной строки 1,2 и 3 как Test.bat 1 2 3.

1 
2 
3
S.No Петли и описание
1 Реализация оператора Break

Оператор break используется для изменения потока управления внутри циклов в любом языке программирования. Оператор break обычно используется в конструкциях цикла и используется для немедленного завершения самого внутреннего замкнутого цикла.

Оператор break используется для изменения потока управления внутри циклов в любом языке программирования. Оператор break обычно используется в конструкциях цикла и используется для немедленного завершения самого внутреннего замкнутого цикла.

Пакетный скрипт – Функции

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

Как и любые другие языки, функции в Batch Script следуют той же процедуре –

  • Объявление функции – сообщает компилятору имя функции, тип возвращаемого значения и параметры.

  • Определение функции – предоставляет фактическое тело функции.

Объявление функции – сообщает компилятору имя функции, тип возвращаемого значения и параметры.

Определение функции – предоставляет фактическое тело функции.

Определение функции

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

Каждая функция имеет имя функции, которое описывает задачу, которую выполняет функция. Чтобы использовать функцию, вы «вызываете» эту функцию с ее именем и передаете ее входные значения (известные как аргументы), которые соответствуют типам параметров функции.

Ниже приведен синтаксис простой функции.

:function_name 
Do_something 
EXIT /B 0
  • Имя_функции – это имя, данное функции, которое должно иметь некоторое значение, чтобы соответствовать действию функции.

  • Оператор EXIT используется для обеспечения правильного выхода из функции.

Имя_функции – это имя, данное функции, которое должно иметь некоторое значение, чтобы соответствовать действию функции.

Оператор EXIT используется для обеспечения правильного выхода из функции.

Ниже приведен пример простой функции.

пример

:Display 
SET /A index=2 
echo The value of index is %index% 
EXIT /B 0
S.No Функции и описание
1 Вызов функции

Функция вызывается в Batch Script с помощью команды call.

2 Функции с параметрами

Функции могут работать с параметрами, просто передавая их при вызове функции.

3 Функции с возвращаемыми значениями

Функции могут работать с возвращаемыми значениями, просто передавая имена переменных

4 Локальные переменные в функциях

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

5 Рекурсивные функции

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

6 Файловый ввод / вывод

В Batch Script можно выполнять обычные операции ввода-вывода файлов, которые ожидаются на любом языке программирования.

7 Создание файлов

Создание нового файла осуществляется с помощью фильтра перенаправления>. Этот фильтр можно использовать для перенаправления любого вывода в файл.

8 Запись в файлы

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

9 Добавление к файлам

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

10 Чтение из файлов

Чтение файлов в пакетном скрипте выполняется с помощью команды цикла FOR для прохождения каждой строки, определенной в файле, который необходимо прочитать.

11 Удаление файлов

Для удаления файлов Batch Script предоставляет команду DEL.

12 Переименование файлов

Для переименования файлов Batch Script предоставляет команду REN или RENAME.

13 Перемещение файлов

Для перемещения файлов Batch Script предоставляет команду MOVE.

14 Пакетные файлы – Трубы

Оператор канала (|) принимает выходные данные (по умолчанию STDOUT) одной команды и направляет их на вход (по умолчанию STDIN) другой команды.

15 Пакетные файлы – входы

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

16 Использование оператора SHIFT

Одним из ограничений аргументов командной строки является то, что он может принимать только аргументы до% 9. Давайте возьмем пример этого ограничения.

17 Папки

В Batch Script можно выполнять обычные операции с папками, которые ожидаются на любом языке программирования.

18 Создание папок

Создание папки выполняется с помощью команды MD (Make directory).

19 Список содержимого папки

Список содержимого папки можно выполнить с помощью команды dir. Эта команда позволяет вам увидеть доступные файлы и каталоги в текущем каталоге.

20 Удаление папок

Для удаления папок Batch Scripting предоставляет команду DEL.

21 Переименование папок

Для переименования папок Batch Script предоставляет команду REN или RENAME.

22 Перемещение папок

Для перемещения папок Batch Script предоставляет команду MOVE.

Функция вызывается в Batch Script с помощью команды call.

Функции могут работать с параметрами, просто передавая их при вызове функции.

Функции могут работать с возвращаемыми значениями, просто передавая имена переменных

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

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

В Batch Script можно выполнять обычные операции ввода-вывода файлов, которые ожидаются на любом языке программирования.

Создание нового файла осуществляется с помощью фильтра перенаправления>. Этот фильтр можно использовать для перенаправления любого вывода в файл.

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

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

Чтение файлов в пакетном скрипте выполняется с помощью команды цикла FOR для прохождения каждой строки, определенной в файле, который необходимо прочитать.

Для удаления файлов Batch Script предоставляет команду DEL.

Для переименования файлов Batch Script предоставляет команду REN или RENAME.

Для перемещения файлов Batch Script предоставляет команду MOVE.

Оператор канала (|) принимает выходные данные (по умолчанию STDOUT) одной команды и направляет их на вход (по умолчанию STDIN) другой команды.

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

Одним из ограничений аргументов командной строки является то, что он может принимать только аргументы до% 9. Давайте возьмем пример этого ограничения.

В Batch Script можно выполнять обычные операции с папками, которые ожидаются на любом языке программирования.

Создание папки выполняется с помощью команды MD (Make directory).

Список содержимого папки можно выполнить с помощью команды dir. Эта команда позволяет вам увидеть доступные файлы и каталоги в текущем каталоге.

Для удаления папок Batch Scripting предоставляет команду DEL.

Для переименования папок Batch Script предоставляет команду REN или RENAME.

Для перемещения папок Batch Script предоставляет команду MOVE.

Пакетный скрипт – Процесс

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

Просмотр списка запущенных процессов

В Batch Script команду TASKLIST можно использовать для получения списка текущих запущенных процессов в системе.

Синтаксис

TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]
Ниже приведено описание параметров, которые могут быть представлены команде TASKLIST.

S.No. Варианты и описание
1.

Система

Определяет удаленную систему для подключения

2.

/ U

[домен ] пользователь

Определяет пользовательский контекст, в котором должна выполняться команда.

3.

/ P [пароль]

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

4.

/ M [модуль]

Перечисляет все задачи, в настоящее время использующие имя exe / dll. Если имя модуля не указано, отображаются все загруженные модули.

5.

/ SVC

Отображает службы, размещенные в каждом процессе.

6.

/ V ,

Отображает подробную информацию о задаче.

7.

/ FI фильтр

Отображает набор задач, которые соответствуют заданным критериям, указанным фильтром.

8.

/ FO формат

Определяет формат вывода. Допустимые значения: «TABLE», «LIST», «CSV».

9.

/ NH

Указывает, что заголовок столбца не должен отображаться в выходных данных. Действительно только для форматов “TABLE” и “CSV”.

Система

Определяет удаленную систему для подключения

/ U

[домен ] пользователь

Определяет пользовательский контекст, в котором должна выполняться команда.

/ P [пароль]

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

/ M [модуль]

Перечисляет все задачи, в настоящее время использующие имя exe / dll. Если имя модуля не указано, отображаются все загруженные модули.

/ SVC

Отображает службы, размещенные в каждом процессе.

/ V ,

Отображает подробную информацию о задаче.

/ FI фильтр

Отображает набор задач, которые соответствуют заданным критериям, указанным фильтром.

/ FO формат

Определяет формат вывода. Допустимые значения: «TABLE», «LIST», «CSV».

/ NH

Указывает, что заголовок столбца не должен отображаться в выходных данных. Действительно только для форматов “TABLE” и “CSV”.

Примеры

TASKLIST

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

Image Name                    PID       Session Name       Session#     Mem Usage
========================= ========    ================ =========== ============
System Idle Process             0        Services            0              4 K
System                          4        Services            0            272 K
smss.exe                      344        Services            0          1,040 K
csrss.exe                     528        Services            0          3,892 K
csrss.exe                     612        Console             1         41,788 K
wininit.exe                   620        Services            0          3,528 K
winlogon.exe                  648        Console             1          5,884 K
services.exe                  712        Services            0          6,224 K
lsass.exe                     720        Services            0          9,712 K
svchost.exe                   788        Services            0         10,048 K
svchost.exe                   832        Services            0          7,696 K
dwm.exe                       916        Console             1        117,440 K
nvvsvc.exe                    932        Services            0          6,692 K
nvxdsync.exe                  968        Console             1         16,328 K
nvvsvc.exe                    976        Console             1         12,756 K
svchost.exe                  1012        Services            0         21,648 K
svchost.exe                   236        Services            0         33,864 K
svchost.exe                   480        Services            0         11,152 K
svchost.exe                  1028        Services            0         11,104 K
svchost.exe                  1048        Services            0         16,108 K
wlanext.exe                  1220        Services            0         12,560 K
conhost.exe                  1228        Services            0          2,588 K
svchost.exe                  1276        Services            0         13,888 K
svchost.exe                  1420        Services            0         13,488 K
spoolsv.exe                  1556        Services            0          9,340 K
tasklist > process.txt

Приведенная выше команда берет вывод, отображаемый в списке задач, и сохраняет его в файле process.txt.

tasklist /fi "memusage gt 40000"

Приведенная выше команда извлекает только те процессы, чья память превышает 40 МБ. Ниже приведен пример вывода, который можно отобразить.

Image Name                    PID      Session Name     Session#     Mem Usage
=========================   ======== ================ =========== ============
dwm.exe                        916     Console             1        127,912 K
explorer.exe                  2904     Console             1        125,868 K
ServerManager.exe             1836     Console             1         59,796 K
WINWORD.EXE                   2456     Console             1        144,504 K
chrome.exe                    4892     Console             1        123,232 K
chrome.exe                    4976     Console             1         69,412 K
chrome.exe                    1724     Console             1         76,416 K
chrome.exe                    3992     Console             1         56,156 K
chrome.exe                    1168     Console             1        233,628 K
chrome.exe                     816     Console             1         66,808 K

Убить определенный процесс

Позволяет пользователю, работающему под управлением Microsoft Windows XP professional, Windows 2003 или более поздней версии, завершить задачу из командной строки Windows по идентификатору процесса (PID) или имени изображения. Команда, используемая для этой цели, является командой TASKILL.

Синтаксис

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] 
[/PID processid | /IM imagename] } [/T] [/F]
Ниже приведено описание параметров, которые могут быть представлены команде TASKKILL.

S.No. Варианты и описание
1.

Система

Определяет удаленную систему для подключения

2.

/ U

[домен ] пользователь

Определяет пользовательский контекст, в котором должна выполняться команда.

3.

/ P [пароль]

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

4.

/ FI

FILTERNAME

Применяет фильтр для выбора набора задач. Позволяет использовать «*». ех. imagename eq acme * См. фильтры ниже для получения дополнительной информации и примеров.

5.

/ PID

ProcessId

Указывает PID процесса, который должен быть завершен. Используйте TaskList, чтобы получить PID.

6.

ImageName

Определяет имя изображения процесса, который будет завершен. Подстановочный знак «*» можно использовать для указания всех задач или имен изображений.

7.

/ Т

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

8.

/ F

Указывает на принудительное завершение процесса (ов).

Система

Определяет удаленную систему для подключения

/ U

[домен ] пользователь

Определяет пользовательский контекст, в котором должна выполняться команда.

/ P [пароль]

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

/ FI

FILTERNAME

Применяет фильтр для выбора набора задач. Позволяет использовать «*». ех. imagename eq acme * См. фильтры ниже для получения дополнительной информации и примеров.

/ PID

ProcessId

Указывает PID процесса, который должен быть завершен. Используйте TaskList, чтобы получить PID.

ImageName

Определяет имя изображения процесса, который будет завершен. Подстановочный знак «*» можно использовать для указания всех задач или имен изображений.

/ Т

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

/ F

Указывает на принудительное завершение процесса (ов).

Примеры

taskkill /f /im notepad.exe

Приведенная выше команда убивает задачу открытия блокнота, если она открыта.

taskill /pid 9214

Приведенная выше команда убивает процесс, который имеет процесс 9214.

Начиная новый процесс

У сценариев DOS также есть возможность начать новый процесс. Это достигается с помощью команды СТАРТ.

Синтаксис

START "title" [/D path] [options] "command" [parameters]

В которой

  • title – Текст для строки заголовка окна CMD (обязательно.)

  • путь – Начальный каталог.

  • команда – команда, командный файл или исполняемая программа для запуска.

  • параметры – параметры, переданные в команду.

title – Текст для строки заголовка окна CMD (обязательно.)

путь – Начальный каталог.

команда – команда, командный файл или исполняемая программа для запуска.

параметры – параметры, переданные в команду.

Ниже приведено описание параметров, которые могут быть представлены команде START.

S.No. Варианты и описание
1.

/ MIN

Стартовое окно свернуто

2.

/МАКСИМУМ

Окно запуска развернуто.

3.

/НИЗКИЙ

Используйте приоритетный класс IDLE.

4.

/НОРМАЛЬНЫЙ

Используйте НОРМАЛЬНЫЙ класс приоритета.

5.

/ВЫШЕ НОРМЫ

Используйте ABOVENORMAL приоритетный класс.

6.

/НИЖЕ НОРМЫ

Используйте НИЖЕ НОРМАЛЬНЫЙ приоритетный класс.

7.

/ВЫСОКО

Используйте ВЫСОКИЙ приоритетный класс.

8.

/ АВТОКОРРЕКЦИЯ

Используйте REALTIME приоритетный класс.

/ MIN

Стартовое окно свернуто

/МАКСИМУМ

Окно запуска развернуто.

/НИЗКИЙ

Используйте приоритетный класс IDLE.

/НОРМАЛЬНЫЙ

Используйте НОРМАЛЬНЫЙ класс приоритета.

/ВЫШЕ НОРМЫ

Используйте ABOVENORMAL приоритетный класс.

/НИЖЕ НОРМЫ

Используйте НИЖЕ НОРМАЛЬНЫЙ приоритетный класс.

/ВЫСОКО

Используйте ВЫСОКИЙ приоритетный класс.

/ АВТОКОРРЕКЦИЯ

Используйте REALTIME приоритетный класс.

Примеры

START "Test Batch Script" /Min test.bat

Приведенная выше команда запустит пакетный скрипт test.bat в новом окне. Окна начнутся в свернутом режиме и также будут иметь название «Test Batch Script».

START "" "C:Program FilesMicrosoft OfficeWinword.exe" "D:testTESTA.txt"

Приведенная выше команда фактически запустит Microsoft Word в другом процессе, а затем откроет файл TESTA.txt в MS Word.

Пакетный скрипт – псевдонимы

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

Dir /w

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

dw = dir /w

Когда мы хотим выполнить команду dir / w , мы можем просто ввести слово dw . Слово «dw» теперь стало псевдонимом команды Dir / w.

Создание псевдонима

Псевдонимы управляются с помощью команды doskey .

Синтаксис

DOSKEY [options] [macroname=[text]]

В которой

  • macroname – короткое имя для макроса.

  • текст – команды, которые вы хотите вспомнить.

macroname – короткое имя для макроса.

текст – команды, которые вы хотите вспомнить.

Ниже приведено описание параметров, которые могут быть представлены команде DOSKEY.

S.No. Варианты и описание
1.

/ REINSTALL

Устанавливает новую копию Doskey

2.

/ LISTSIZE = размер

Устанавливает размер буфера истории команд.

3.

/ MACROS

Отображает все макросы Doskey.

4.

/ MACROS: ALL

Отображает все макросы Doskey для всех исполняемых файлов, в которых есть макросы Doskey.

5.

/ MACROS: exename

Отображает все макросы Doskey для данного исполняемого файла.

6.

/ ИСТОРИЯ

Отображает все команды, хранящиеся в памяти.

7.

/ ВСТАВИТЬ

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

8.

/ Overstrike

Указывает, что новый текст заменяет старый.

9.

/ EXENAME = exename

Определяет исполняемый файл.

10.

/ MACROFILE = имя файла

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

11.

имя_макроса

Указывает имя для макроса, который вы создаете.

12.

текст

Указывает команды, которые вы хотите записать.

/ REINSTALL

Устанавливает новую копию Doskey

/ LISTSIZE = размер

Устанавливает размер буфера истории команд.

/ MACROS

Отображает все макросы Doskey.

/ MACROS: ALL

Отображает все макросы Doskey для всех исполняемых файлов, в которых есть макросы Doskey.

/ MACROS: exename

Отображает все макросы Doskey для данного исполняемого файла.

/ ИСТОРИЯ

Отображает все команды, хранящиеся в памяти.

/ ВСТАВИТЬ

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

/ Overstrike

Указывает, что новый текст заменяет старый.

/ EXENAME = exename

Определяет исполняемый файл.

/ MACROFILE = имя файла

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

имя_макроса

Указывает имя для макроса, который вы создаете.

текст

Указывает команды, которые вы хотите записать.

пример

Создайте новый файл с именем keys.bat и введите в него следующие команды. Приведенные ниже команды создают два псевдонима, один if для команды cd, которая автоматически переходит в каталог с именем test. А другой для команды dir.

@echo off
doskey cd = cd/test
doskey d = dir

Как только вы выполните команду, вы сможете запустить эти псевдонимы в командной строке.

Выход

На следующем снимке экрана показано, что после выполнения созданного выше пакетного файла вы можете свободно ввести команду ‘d’, и она выдаст вам список каталогов, который означает, что ваш псевдоним был создан.

Пример вывода псевдонима

Удаление псевдонима

Псевдоним или макрос можно удалить, установив значение макроса в NULL.

пример

@echo off
doskey cd = cd/test
doskey d = dir
d= 

В приведенном выше примере мы сначала устанавливаем макрос d в d = dir. После чего мы устанавливаем его в NULL. Поскольку мы установили значение d в NULL, макрос d будет удален.

Замена псевдонима

Псевдоним или макрос можно заменить, установив значение макроса в новое требуемое значение.

пример

@echo off
doskey cd = cd/test
doskey d = dir

d = dir /w

В приведенном выше примере мы сначала устанавливаем макрос d в d = dir. После чего мы устанавливаем его в dir / w. Поскольку мы установили для значения d новое значение, псевдоним d теперь будет принимать новое значение.

Пакетный скрипт – Устройства

В Windows появилась улучшенная библиотека, которую можно использовать в пакетном скрипте для работы с устройствами, подключенными к системе. Это называется консолью устройства – DevCon.exe.

Разработчики и тестировщики драйверов Windows могут использовать DevCon для проверки правильности установки и настройки драйвера, включая соответствующие INF-файлы, стек драйверов, файлы драйверов и пакет драйверов. Вы также можете использовать команды DevCon (включить, отключить, установить, запустить, остановить и продолжить) в сценариях для тестирования драйвера. DevCon – это инструмент командной строки, который выполняет функции управления устройствами на локальных и удаленных компьютерах.

Отображение информации о драйвере и устройстве DevCon может отображать следующие свойства драйверов и устройств на локальных компьютерах и удаленных компьютерах (под управлением Windows XP и более ранних версий) –

  • Аппаратные идентификаторы, совместимые идентификаторы и идентификаторы экземпляров устройства. Эти идентификаторы подробно описаны в строках идентификации устройства.

  • Классы настройки устройства.

  • Устройства в классе настройки устройства.

  • INF-файлы и файлы драйверов устройств.

  • Детали пакетов драйверов.

  • Аппаратные ресурсы.

  • Состояние устройства.

  • Ожидаемый стек драйверов.

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

  • Поиск устройств DevCon может выполнять поиск установленных и удаленных устройств на локальном или удаленном компьютере по идентификатору оборудования, идентификатору экземпляра устройства или классу настройки устройства.

  • Изменение настроек устройства DevCon может изменять состояние или конфигурацию устройств Plug and Play (PnP) на локальном компьютере следующими способами:

    • Включить устройство.

    • Отключить устройство.

    • Обновление драйверов (интерактивное и неинтерактивное).

    • Установите устройство (создайте devnode и установите программное обеспечение).

    • Удалите устройство из дерева устройств и удалите его стек устройств.

    • Rescan для устройств Plug and Play.

    • Добавьте, удалите и измените порядок аппаратных идентификаторов устройств с корневым перечислением.

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

    • Добавляйте и удаляйте сторонние пакеты драйверов из хранилища драйверов.

Аппаратные идентификаторы, совместимые идентификаторы и идентификаторы экземпляров устройства. Эти идентификаторы подробно описаны в строках идентификации устройства.

Классы настройки устройства.

Устройства в классе настройки устройства.

INF-файлы и файлы драйверов устройств.

Детали пакетов драйверов.

Аппаратные ресурсы.

Состояние устройства.

Ожидаемый стек драйверов.

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

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

Изменение настроек устройства DevCon может изменять состояние или конфигурацию устройств Plug and Play (PnP) на локальном компьютере следующими способами:

Включить устройство.

Отключить устройство.

Обновление драйверов (интерактивное и неинтерактивное).

Установите устройство (создайте devnode и установите программное обеспечение).

Удалите устройство из дерева устройств и удалите его стек устройств.

Rescan для устройств Plug and Play.

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

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

Добавляйте и удаляйте сторонние пакеты драйверов из хранилища драйверов.

DevCon (DevCon.exe) включается при установке WDK, Visual Studio и Windows SDK для настольных приложений. DevCon.exe комплект доступен в следующих местах при установке.

%WindowsSdkDir%toolsx64devcon.exe
%WindowsSdkDir%toolsx86devcon.exe
%WindowsSdkDir%toolsarmdevcon.exe

Синтаксис

devcon [/m:\computer] [/r] command [arguments]

в которой

  • / m: \ computer – запускает команду на указанном удаленном компьютере. Обратный слеш обязателен.

  • / r – условная перезагрузка. Перезагрузка системы после завершения операции, только если требуется перезагрузка, чтобы изменения вступили в силу.

  • команда – Определяет команду DevCon.

  • Для просмотра и отображения информации об устройствах на компьютере используйте следующие команды:

    • DevCon HwIDs

    • DevCon Classes

    • DevCon ListClass

    • DevCon DriverFiles

    • DevCon DriverNodes

    • Ресурсы DevCon

    • Стек DevCon

    • Статус DevCon

    • DevCon Dp_enum

  • Для поиска информации об устройствах на компьютере используйте следующие команды –

    • DevCon Find

    • DevCon FindAll

  • Чтобы манипулировать устройством или изменить его конфигурацию, используйте следующие команды –

    • DevCon Enable

    • DevCon Disable

    • Обновление DevCon

    • DevCon UpdateNI

    • DevCon Установить

    • DevCon Удалить

    • DevCon Rescan

    • DevCon Restart

    • DevCon Reboot

    • DevCon SetHwID

    • DevCon ClassFilter

    • DevCon Dp_add

    • DevCon Dp_delete

/ m: \ computer – запускает команду на указанном удаленном компьютере. Обратный слеш обязателен.

/ r – условная перезагрузка. Перезагрузка системы после завершения операции, только если требуется перезагрузка, чтобы изменения вступили в силу.

команда – Определяет команду DevCon.

Для просмотра и отображения информации об устройствах на компьютере используйте следующие команды:

DevCon HwIDs

DevCon Classes

DevCon ListClass

DevCon DriverFiles

DevCon DriverNodes

Ресурсы DevCon

Стек DevCon

Статус DevCon

DevCon Dp_enum

Для поиска информации об устройствах на компьютере используйте следующие команды –

DevCon Find

DevCon FindAll

Чтобы манипулировать устройством или изменить его конфигурацию, используйте следующие команды –

DevCon Enable

DevCon Disable

Обновление DevCon

DevCon UpdateNI

DevCon Установить

DevCon Удалить

DevCon Rescan

DevCon Restart

DevCon Reboot

DevCon SetHwID

DevCon ClassFilter

DevCon Dp_add

DevCon Dp_delete

Примеры

Ниже приведены некоторые примеры использования команды DevCon.

List all driver files

Следующая команда использует операцию DevCon DriverFiles для получения списка имен файлов драйверов, которые используют устройства в системе. Команда использует подстановочный знак (*) для обозначения всех устройств в системе. Поскольку вывод является обширным, команда использует символ перенаправления (>) для перенаправления вывода в справочный файл driverfiles.txt.

devcon driverfiles * > driverfiles.txt

Следующая команда использует операцию состояния DevCon, чтобы найти состояние всех устройств на локальном компьютере. Затем он сохраняет статус в файле status.txt для регистрации или последующего просмотра. Команда использует подстановочный знак (*) для представления всех устройств и символ перенаправления (>) для перенаправления вывода в файл status.txt.

devcon status * > status.txt

Следующая команда включает все принтерные устройства на компьютере, указав класс настройки принтера в команде DevCon Enable. Команда включает параметр / r, который перезагружает систему, если это необходимо, чтобы включение было эффективным.

devcon /r enable = Printer

Следующая команда использует операцию DevCon Install для установки устройства клавиатуры на локальном компьютере. Команда включает полный путь к файлу INF для устройства (keyboard.inf) и идентификатор оборудования (* PNP030b).

devcon /r install c:windowsinfkeyboard.inf *PNP030b

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

devcon scan

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

devcon rescan

Пакетный скрипт – Реестр

Реестр является одним из ключевых элементов в системе Windows. Он содержит много информации о различных аспектах операционной системы. Почти все приложения, установленные в системе Windows, взаимодействуют с реестром в той или иной форме.

Реестр содержит два основных элемента: ключи и значения. Ключи реестра – это объекты-контейнеры, похожие на папки. Значения реестра – это неконтейнерные объекты, похожие на файлы. Ключи могут содержать значения или дополнительные ключи. На ключи ссылается синтаксис, аналогичный путевым именам Windows, с использованием обратной косой черты для обозначения уровней иерархии.

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

S.No Типы реестра и описание
1 Чтение из реестра

Чтение из реестра осуществляется с помощью команды REG QUERY.

2 Добавление в реестр

Добавление в реестр осуществляется с помощью команды REG ADD.

3 Удаление из реестра

Удаление из реестра производится с помощью команды REG DEL.

4 Копирование ключей реестра

Копирование из реестра выполняется с помощью команды REG COPY.

5 Сравнение ключей реестра

Сравнение разделов реестра производится с помощью команды REG COMPARE.

Чтение из реестра осуществляется с помощью команды REG QUERY.

Добавление в реестр осуществляется с помощью команды REG ADD.

Удаление из реестра производится с помощью команды REG DEL.

Копирование из реестра выполняется с помощью команды REG COPY.

Сравнение разделов реестра производится с помощью команды REG COMPARE.

Пакетный скрипт – Сеть

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

S.No NET команды и описание
1 Чистые счета

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

2 NET CONFIG

Отображает ваши текущие настройки сервера или рабочей группы.

3 Чистый компьютер

Добавляет или удаляет компьютер, подключенный к контроллеру домена Windows.

4 NET USER

Эта команда может быть использована для следующих

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

5 NET STOP / START

Эта команда используется для остановки и запуска определенной службы.

6 ЧИСТАЯ СТАТИСТИКА

Отображение сетевой статистики рабочей станции или сервера.

7 Чистое использование

Подключает или отключает компьютер от общего ресурса или отображает информацию о ваших подключениях.

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

Отображает ваши текущие настройки сервера или рабочей группы.

Добавляет или удаляет компьютер, подключенный к контроллеру домена Windows.

Эта команда может быть использована для следующих

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

Эта команда используется для остановки и запуска определенной службы.

Отображение сетевой статистики рабочей станции или сервера.

Подключает или отключает компьютер от общего ресурса или отображает информацию о ваших подключениях.

Пакетный скрипт – Печать

Печать также можно контролировать из Пакетного сценария с помощью команды NET PRINT.

Синтаксис

PRINT [/D:device] [[drive:][path]filename[...]]

Где / D: устройство – указывает устройство печати.

пример

print c:example.txt /c /d:lpt1

Приведенная выше команда напечатает файл example.txt на параллельный порт lpt1.

Управление принтером из командной строки

Начиная с Windows 2000, многие, но не все, параметры принтера можно настроить из командной строки Windows с помощью PRINTUI.DLL и RUNDLL32.EXE.

Синтаксис

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @ commandfile ]

Где некоторые из доступных вариантов следующие –

  • / DL – Удалить локальный принтер.

  • / dn – удалить подключение к сетевому принтеру.

  • / dd – удалить драйвер принтера.

  • / e – Показать настройки печати.

  • / f [файл] – либо файл inf, либо выходной файл.

  • / F [файл] – расположение INF-файла, от которого может зависеть INF-файл, указанный в / f.

  • / ia – установить драйвер принтера с помощью файла inf.

  • / id – установить драйвер принтера с помощью мастера добавления драйвера принтера.

  • / if – установить принтер с помощью файла inf.

  • / ii – Установите принтер с помощью мастера добавления принтера с помощью файла inf.

  • / il – Установить принтер с помощью мастера добавления принтера.

  • / in – Добавить подключение к сетевому принтеру.

  • / ip – установить принтер с помощью мастера установки сетевого принтера.

  • / k – Печать тестовой страницы на указанном принтере, не может сочетаться с командой при установке принтера.

  • / l [путь] – Путь источника драйвера принтера.

  • / m [модель] – название модели драйвера принтера.

  • / n [имя] – имя принтера.

  • / o – Показать представление очереди принтера.

  • / p – Показать свойства принтера.

  • / Ss – сохранить настройки принтера в файл.

  • / Sr – восстановить настройки принтера из файла.

  • / y – установить принтер по умолчанию.

  • / Xg – Получить настройки принтера.

  • / Xs – установить настройки принтера.

/ DL – Удалить локальный принтер.

/ dn – удалить подключение к сетевому принтеру.

/ dd – удалить драйвер принтера.

/ e – Показать настройки печати.

/ f [файл] – либо файл inf, либо выходной файл.

/ F [файл] – расположение INF-файла, от которого может зависеть INF-файл, указанный в / f.

/ ia – установить драйвер принтера с помощью файла inf.

/ id – установить драйвер принтера с помощью мастера добавления драйвера принтера.

/ if – установить принтер с помощью файла inf.

/ ii – Установите принтер с помощью мастера добавления принтера с помощью файла inf.

/ il – Установить принтер с помощью мастера добавления принтера.

/ in – Добавить подключение к сетевому принтеру.

/ ip – установить принтер с помощью мастера установки сетевого принтера.

/ k – Печать тестовой страницы на указанном принтере, не может сочетаться с командой при установке принтера.

/ l [путь] – Путь источника драйвера принтера.

/ m [модель] – название модели драйвера принтера.

/ n [имя] – имя принтера.

/ o – Показать представление очереди принтера.

/ p – Показать свойства принтера.

/ Ss – сохранить настройки принтера в файл.

/ Sr – восстановить настройки принтера из файла.

/ y – установить принтер по умолчанию.

/ Xg – Получить настройки принтера.

/ Xs – установить настройки принтера.

Тестирование, если принтер существует

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

Существование принтера можно оценить с помощью файла RUNDLL32.EXE PRINTUI.DLL, который используется для управления большинством настроек принтера.

пример

SET PrinterName = Test Printer
SET file=%TEMP%Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%file%" /q

IF EXIST "%file%" (
   ECHO %PrinterName% printer exists
) ELSE (
   ECHO %PrinterName% printer does NOT exists
)

Приведенная выше команда сделает следующее –

  • Сначала будет установлено имя принтера и имя файла, в котором будут храниться настройки принтера.

  • Команды RUNDLL32.EXE PRINTUI.DLL будут использоваться для проверки, действительно ли принтер существует, путем отправки параметров конфигурации файла в файл Prt.txt.

Сначала будет установлено имя принтера и имя файла, в котором будут храниться настройки принтера.

Команды RUNDLL32.EXE PRINTUI.DLL будут использоваться для проверки, действительно ли принтер существует, путем отправки параметров конфигурации файла в файл Prt.txt.

Пакетный скрипт – отладка

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

Сообщения об ошибках

Чтобы обнаружить источник сообщения, выполните следующие действия.

Шаг 1 – УДАЛИТЕ строку @ECHO OFF, т.е. REM @ECHO OFF или :: @ECHO OFF.

Шаг 2 – Запустите командный файл с необходимыми параметрами командной строки, перенаправив весь вывод в файл журнала для последующего сравнения.

test.bat > batch.log 2>&1

Шаг 3 – Найдите в файле batch.log сообщения об ошибках.

Шаг 4 – Проверьте предыдущую строку на наличие каких-либо неожиданных или недействительных команд, параметров командной строки или значений; обратите особое внимание на значения любых переменных среды, используемых в команде.

Шаг 5 – Исправьте ошибку и повторяйте этот процесс, пока все сообщения об ошибках не исчезнут.

Сложные Командные Линии

Другим распространенным источником ошибок являются неправильно перенаправленные команды, такие как, например, «вложенные» команды FIND или FINDSTR с неверными строками поиска, иногда внутри цикла FOR / F.

Чтобы проверить правильность этих сложных команд, выполните следующие действия:

Шаг 1 – Вставьте «строки проверки команд» непосредственно перед строкой, которая использует комплексный набор команд.

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

TYPE %Temp%.apipaorg.reg
ECHO.================================================ TYPE %Temp%.apipaorg.reg 
| FIND 
"[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParametersInterfaces"

Шаг 2 – Следуйте процедуре, чтобы найти источники сообщений об ошибках, описанных выше.

Шаг 3 – Обратите особое внимание на вывод «упрощенных» командных строк: выводится ли ожидаемый формат? Является ли значение токена или позиция ожидаемой?

подпрограммы

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

Чтобы выяснить, что вызывает неправильный вызов подпрограммы, выполните следующие действия:

Шаг 1 – Добавить и сбросить переменную счетчика в начале скрипта –

SET Counter = 0

Шаг 2 – Увеличивайте счетчик каждый раз, когда вызывается подпрограмма, вставляя следующую строку в начале подпрограммы

SET /A Counter+=1

Шаг 3 – Вставьте еще одну строку сразу после приращения счетчика, содержащую только команду SET; это перечислит все переменные окружения и их значения.

Шаг 4 – Следуйте процедуре, чтобы найти источники сообщений об ошибках, описанных выше.

Версии Windows

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

В следующем примере показано, как проверить различные версии операционной системы, чтобы проверить соответствующие версии Windows.

@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only

Пакетный скрипт – логирование

Вход в Batch Script возможен с помощью команды перенаправления.

Синтаксис

test.bat > testlog.txt 2> testerrors.txt

пример

Создайте файл с именем test.bat и введите в него следующую команду.

net statistics /Server

Приведенная выше команда имеет ошибку, потому что опция для команды net statistics задана неверно.

Выход

Если команда с вышеуказанным файлом test.bat запускается как

test.bat > testlog.txt 2> testerrors.txt

И вы откроете файл testerrors.txt, вы увидите следующую ошибку.

The option /SERVER is unknown.

Синтаксис этой команды –

NET STATISTICS
[WORKSTATION | SERVER]

Дополнительную помощь можно получить, набрав NET HELPMSG 3506.

Если вы откроете файл с именем testlog.txt, он покажет вам, какие команды были выполнены.

Рассмотрим мощный инструмент автоматизации рутинных задач в семействе операционных систем Windows.

BAT-файл — это последовательность команд для интерпретатора командной строки в виде текстового файла с расширением .bat или .cmd. Основное предназначение пакетных файлов — автоматизация рутинных действий пользователя компьютера.

Название BAT появилось от английского batch — пакетная обработка. В истории продуктов Microsoft пакетные файлы существовали с первой версии MS-DOS в 80-х годах и позже успешно интегрировались в Microsoft Windows. В MS-DOS командным интерпретатором выступает COMMAND.COM, а начиная с Windows NT и до сих пор используется CMD.EXE.

Интерпретатор COMMAND.COM принимает файлы с расширением .BAT. Расширение .CMD создано для интерпретатора CMD.EXE с целью различать файлы для «старого» и «нового» интерпретаторов. CMD.EXE корректно обрабатывает оба расширения.

Интерпретатор CMD.EXE является частью современных операционных систем семейства Microsoft Windows, несмотря на отсутствие развития с начала 2000-х.

Основы взаимодействия с bat-файлами

Пакетный файл bat — это текстовый документ со специальным расширением. Для создания своего первого bat-файла достаточно «Блокнота», который доступен в операционной системе. Для повышения удобства написания и поддержки bat-файлов рекомендуем использовать Notepad++ или любой другой текстовый редактор с подсветкой синтаксиса. 

Создание bat-файлов

создание файла

Для создания пакетных файлов необходимо открыть текстовый редактор и в меню Файл выбрать Сохранить как….

сохранение в формате bat

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

расширения имен

Если вы ошиблись при сохранении и пакетный файл сохранился с расширением txt, то не обязательно совершать повторное сохранение. Можно включить отображение расширения имен файлов и переименовать файл.

Запуск bat-файлов

запуск от имени администратора

Запуск пакетных файлов производится двойным кликом по иконке. Дополнительно можно использовать команду Открыть из контекстного меню, которое доступно при нажатии правой клавиши мыши (ПКМ) по файлу. Если для выполнения команд требуются права администратора, то в том же контекстном меню есть пункт Запуск от имени администратора

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

Запуск через контекстное меню откроет командный интерпретатор, в котором выполнятся команды bat-файла. По завершении команд окно закроется. Такое поведение неприемлемо, если от пакетного файла требуется какая-то обратная связь — например, сообщение об ошибке или результат вычислений. В таком случае интерпретатор следует запустить вручную и передать ему пакетный файл. 

выполнение команды cmd

Для запуска интерпретатора командной строки необходимо открыть меню Выполнить сочетанием клавиш Win + R, вписать cmd и нажать ОК.

окно интерпретатора

Для запуска пакетного файла его необходимо перенести мышкой в открывшееся окно и нажать Enter. Команды bat-файла будут выполнены, а его вывод вы увидите на экране. 

Вне зависимости от способа запуска откроется окно, которое может привлекать внимание и раздражать. Для запуска в «скрытом» режиме необходимо использовать другой скриптовой язык Microsoft Windows — VBScript.

По аналогии создаем файл с расширением .vbs и заполняем его следующими командами:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "С:путьдовашегоскрипта.bat" & Chr(34), 0
Set WshShell = Nothing

Для скрытого запуска следует запускать созданный файл, а не bat-файл. Скрытый запуск bat-файла актуален для автоматизации действий по расписанию, например, создание резервной копии. 

Запуск по расписанию

За выполнение действий по расписанию отвечает Планировщик заданий. Открываем меню Выполнить и запускаем программу taskschd.msc.

запуск по расписанию

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

  • имя для простой идентификации,
  • периодичность и время запуска,
  • действие — Запустить программу,
  • программа или сценарий — путь до вашего .bat-файла или .vbs-файла, который запускает .bat-файл скрытно.

имя файла

триггер

повторяемость

запуск программы

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

В случае разработки собственного bat-файла следует ознакомиться с основами командного интерпретатора.

Команды и синтаксис пакетных файлов

Командный интерпретатор выполняет команды из файла последовательно — строка за строкой. Исключение составляет только оператор GOTO, который «отправляет» к указанной строке. Командный интерпретатор выполняет два вида команд: встроенные команды и внешние исполняемые файлы.

Внешние исполняемые файлы — это любой исполняемый файл, то есть с расширением EXE, CMD или BAT, который доступен в операционной системе. Например, «Блокнот» — это исполняемый файл notepad.exe. Следующая команда приведет к запуску этого приложения с открытым файлом C:1.txt:

notepad.exe C:1.txt

Аргументом может быть не только путь, но и ключ — специальный аргумент, который начинается с символа слэш (/). У каждой программы свой «реестр» ключей и их значений.

Обратите внимание, что не все внешние команды «понимают» аргументы, переданные из интерпретатора командной строки. Например, исполняемый файл приложения калькулятор, calc.exe, игнорирует все аргументы командной строки. Внешним исполняемым файлом может быть в том числе другой bat-файл.

встроенные команды

Встроенные команды — это команды, которые являются частью интерпретатора командной строки. Полный список команд доступен по команде HELP. Данные команды не имеют отдельного исполняемого файла. 

Иногда в имени файла или каталога встречаются пробелы. Наиболее очевидный пример — каталог Program Files на диске C. В этом случае помогают кавычки. Их можно расставить различными способами. Например:

cd "C:Program Files123"
cd C:”Program Files”123

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

Оставлять комментарии при разработке — хороший тон. Так можно объяснить выполняемые действия и потенциальные ошибки. В пакетных файлах можно оставлять комментарии несколькими способами. 

Официальный способ — команда rem или два двоеточия.

rem Это первый комментарий
:: Это тоже комментарий

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

goto start
===
Здесь можно оставить большой комментарий,
лицензию или даже ASCII-арт
===
:start

В конце комментария задаем имя метки, а в начале комментария выполняем команду GOTO c именем метки. Этот способ требует внимания, так как для каждого комментария должна быть своя метка, иначе выполнение bat-файла может отличаться от ожидания разработчика.

Совместимость с MS-DOS 

В старых ОС, таких как MS-DOS, было ограничение на отображение имени файлов. На экран выводилось восемь символов имени, точка и три символа расширения. Если имя файла превышало по длине восемь символов, то имя файла отображалось по следующей схеме:

<первые шесть символов имени>~<порядковый номер>

Например, каталог Program Files выглядит следующим образом:

Progra~1

В современных операционных системах такое отображение не применяется, но CMD.EXE до сих пор поддерживает такие запросы к файлам и каталогам.

Используйте bat-файлы в работе с выделенным сервером

Выберите подходящий из более 100 готовых конфигураций.

Подобрать сервер

Примеры bat-файлов

Рассмотрим несколько примеров bat-файлов. Начнем с базовых команд.

Обновление IP-адреса

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

ipconfig /renew

Данная команда генерирует много текстового вывода, который может испугать неподготовленного пользователя. Сама команда также может быть непривлекательной. Поэтому отключим отображение команды и перенаправим вывод выполнения в «никуда». Вместо слова NUL может быть любое имя или путь. Тогда вывод будет перенаправлен в указанный файл.

rem Отключаем отображение команд. Символ @ отключает отображение текущей команды
@echo off

rem Переводим вывод выполнения в устройство NUL, вывод исчезнет
ipconfig /renew > NUL

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

@echo off
echo Выполняется настройка, пожалуйста, подождите...
ipconfig /renew > NUL
echo Все хорошо.

rem Эта команда остановит выполнение до тех пор, пока пользователь не нажмет любую клавишу
pause

Скорее всего данный скрипт выведет набор непонятных символов вместо сообщения. Дело в том, что в русскоязычных ОС Windows по умолчанию в CMD.EXE используется кодировка CP866. Блокнот сохраняет в CP1251 (Windows-1251), а Notepad++ — в UTF-8. Для решения проблемы необходимо сменить кодировку интерпретатора командой chcp или сохранить bat-файл в кодировке интерпретатора.

rem Смена кодировки на Windows-1251
chcp 1251 > NUL
rem Смена кодировки на UTF-8
chcp 65001 > NUL

Я сохранил файл в кодировке UTF-8 и итоговый скрипт получился таким:

@echo off
chcp 65001 > NUL
echo Выполняется настройка, пожалуйста, подождите...
ipconfig /renew > NUL
echo Все хорошо.
pause

Создание резервной копии каталога

Перейдем к более жизненной ситуации — создание резервной копии (backup) каталога. Предположим, что каждый архив должен иметь в названии дату создания копии. Создадим каталог, имя которого — текущая дата. Текущая дата хранится в переменной DATE. Для обращения к переменным название переменной помещается между знаками процента.

mkdir %DATE%
cd %DATE%

Копирование файлов в текущий каталог производится командой COPY.


rem файлы 1.txt и 2.txt будут скопированы в текущую папку
COPY C:1.txt C:2.txt .

rem файл 3.txt будет сохранен в текущую папку как example.txt
COPY C:1.txt .example.txt

Возможно, в резервную копию необходимо дополнить служебную информацию — например, список файлов в корне копии и имя компьютера.

rem Имя компьютера записывается в файл computer.txt
hostname > computer.txt

rem Список файлов в текущем каталоге записывается в files.txt
dir . > files.txt

Обычно резервные копии хранят в zip- или rar-архивах. Из командной строки отлично управляется архиватор 7z.

cd ..
7z -tzip a backup.zip %DATE% 

Переименование файлов

Переименование файлов в Windows производится командой RENAME. Однако эта команда имеет свои особенности. 

Во-первых, переименование возможно только в рамках одного диска и одного каталога. Между каталогами одного диска допустимо перемещение, а между разными дисками — только копирование.


rename abc.txt cba.txt

Во-вторых, возможно переименование по маске. Допустим, есть список фотографий photo000.jpeg, photo001.jpeg и так далее. Нужно сменить префикс с photo на mobile.

rename photo* mobile*

Если в текущем каталоге есть другие файлы с префиксом photo, а переименовать надо только изображения с расширением jpeg, то команда модифицируется:

rename photo*.jpeg mobile*.jpeg

Удаление файлов

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

Предположим, что в процессе работы пользователя генерируется большое количество файлов с расширением jpeg, которые нужно удалять. На помощь приходит оператор цикла FOR.

rem Ищем все файлы с расширением jpeg в каталоге work
rem Ключ /r включает в поиск все подкаталоги в каталоге work
for /r work %%file in (*.jpeg) do (
   rem Выводим имя файла
   echo %%file

   delete %%i
)

Заключение

Командный интерпретатор CMD.EXE существует долгое время, но, даже несмотря на отсутствия развития, остается востребованным инструментом для автоматизации рутинных действий в операционной системе Microsoft Windows.


Загрузить PDF


Загрузить PDF

В этой статье мы расскажем вам, как в Windows запустить пакетный файл (BAT-файл) с помощью командной строки. Файл можно запустить из окна «Выполнить» или из окна командной строки.

  1. Изображение с названием Run a Batch File from the Command Line on Windows Step 1

    1

    Нажмите Win+R. Откроется окно «Выполнить».

    • Чтобы запустить пакетный файл как администратор, воспользуйтесь методом, который описан в следующем разделе.
  2. Изображение с названием Run a Batch File from the Command Line on Windows Step 2

    2

    Щелкните по Обзор.

  3. Изображение с названием Run a Batch File from the Command Line on Windows Step 3

    3

    Откройте папку с BAT-файлом.

  4. Изображение с названием Run a Batch File from the Command Line on Windows Step 4

    4

    Щелкните по пакетному файлу, чтобы выделить его.

  5. Изображение с названием Run a Batch File from the Command Line on Windows Step 5

    5

    Нажмите Открыть. В окне «Выполнить» отобразится путь к пакетному файлу.

  6. Изображение с названием Run a Batch File from the Command Line on Windows Step 6

    6

    Щелкните по OK. BAT-файл будет запущен (при этом откроется окно командной строки). Когда пакетный файл завершит работу, в нижней части окна командной строки отобразится сообщение «Press any key to continue» (Нажмите любую клавишу, чтобы продолжить).

  7. Изображение с названием Run a Batch File from the Command Line on Windows Step 7

    7

    Нажмите любую клавишу. Окно командной строки закроется.

    Реклама

  1. Изображение с названием Run a Batch File from the Command Line on Windows Step 8

    1

    Откройте меню «Пуск»

    Изображение с названием Windowsstart.png

    . Для этого нажмите на логотип Windows в нижнем левом углу экрана.

  2. Изображение с названием Run a Batch File from the Command Line on Windows Step 9

    2

    Введите cmd в строке поиска меню «Пуск». Отобразятся результаты поиска.

  3. Изображение с названием Run a Batch File from the Command Line on Windows Step 10

    3

    Щелкните правой кнопкой мыши по Командная строка. Раскроется меню.

  4. Изображение с названием Run a Batch File from the Command Line on Windows Step 11

    4

    Нажмите Запуск от имени администратора. На экране отобразится сообщение с подтверждением.

  5. Изображение с названием Run a Batch File from the Command Line on Windows Step 12

    5

    Щелкните по Да. Так вы запустите командную строку с правами администратора.

  6. Изображение с названием Run a Batch File from the Command Line on Windows Step 13

    6

    Введите команду cd, а затем введите путь к папке с BAT-файлом. Например:

    • Если пакетный файл расположен на рабочем столе, введите cd ПользователиИмя пользователяРабочий стол.
    • Если пакетный файл расположен в папке «Загрузки», введите cd ПользователиИмя пользователяЗагрузки.
    • Если вы не знаете свое имя пользователя, введите cd Пользователи, а затем нажмите Enter, чтобы перейти в папку «Пользователи». Теперь введите dir, а затем нажмите Enter, чтобы просмотреть список имен пользователей.
  7. Изображение с названием Run a Batch File from the Command Line on Windows Step 14

    7

    Нажмите Enter. Текущий каталог изменится на папку с BAT-файлом.

  8. Изображение с названием Run a Batch File from the Command Line on Windows Step 15

    8

    Введите имя пакетного файла. Например, если он называется «program.bat», введите program.bat.

    • Если вы не знаете имя файла, введите dir, а затем нажмите Enter, чтобы открыть список всех файлов, которые хранятся в папке. Найдите в списке нужный BAT-файл.
  9. Изображение с названием Run a Batch File from the Command Line on Windows Step 16

    9

    Нажмите Enter. Пакетный файл будет запущен.

    Реклама

Об этой статье

Эту страницу просматривали 18 434 раза.

Была ли эта статья полезной?

Человек на черном фоне
Всем нам, приходилось сталкиваться с рутинными задачами изо дня в день на работе, и не только.

Contents

  • Например:
  • Давайте разберем первый пример:
  • Второй пример:
  • Третий пример:
  • Создание bat Файла своими руками
    • Основные команды, которые используются для написания батников:

Например:

  1. Необходимо раз в месяц удалять все файлы из папки обмен.
  2. «Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.
  3. У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.

Можно еще привести множество примеров обыкновенных задач, на которые лучше не тратить свое время, а автоматизировать процесс. Сегодня хочу рассказать, как пишутся элементарные bat скрипты.

Давайте разберем первый пример:

Необходимо раз в месяц удалять все файлы из папки обмен.

  1. Открываем WordPad, блокнот не подойдет, он не умеет сохранять в кодировке 866.
  2. Пишем:

del /q “c:обмен”
pause
Команда del- удаляет файлы, ключ q говорит, удалять файлы без подтверждения пользователя, дальше идет путь до папки обмен, команда pause – это для вашего удобства, что бы окно не закрылось автоматически после выполнения работы скрипта, можно её не писать.

  1. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, del_obmen.bat, жмем Ок, запускаем и наслаждаемся.

Второй пример:

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

  1. Открываем WordPad.
  2. Пишем:

SHUTDOWN /s
Пояснения я думаю ни к чему.
3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, shutdown.bat, жмем Ок, запускаем и наслаждаемся.
4. Дальше открываем панель управления => планировщик заданий, создаем задание в 20 00, думаю понятно для чего.

Третий пример:

У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.

  1. Открываем WordPad.
  2. Пишем:

start \192.168.0.37SamsungU
Start – запуск, \192.168.0.37 – ip адрес, SamsungU – имя принтера.

Если у вас ip адреса раздаются по DHCP, то лучше ввести не ip адрес, а имя компьютера. 

3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, print.bat, жмем Ок, запускаем и наслаждаемся.

 

Основные команды, которые используются для написания батников:

ASSOC — Отображает или модифицирует связи расширений файлов
AT — Планирует команды и программы для выполнения на компьютере.
ATTRIB — Отображает или изменяет атрибуты файла.
BREAK — Устанавливает или отменяет проверку комбинации [Ctrl+C].
CACLS — Отображает или модифицирует списки управления доступом (ACLs) для файлов.
CALL — Вызывает один *.BAT-файл из другого.
CD — Отображает имя или изменяет имя текущей директории.
CHCP — Отображает или устанавливает номер активной кодовой страницы.
CHDIR — Отображает имя или изменяет имя текущей директории.
CHKDSK — Проверяет диск и отображает отчет о состоянии.
CLS — Очищает экран.
CMD — Стартует новый экземпляр интерпретатора команд Windows NT.
COLOR — Устанавливает цвета по умолчанию для переднего и заднего плана консоли.
COMMAND — Стартует новую копию интерпретатора команд Windows.
COMP — Сравнивает содержимое двух файлов или установки файлов.
COMPACT — Отображает или видоизменяет сжатие файлов на патрициях Windows NT(NTFS).
CONVERT — Конвертирует FAT томов к формату файловой системы Windows NT(NTFS). Вы не можете конвертировать текущий диск.
COPY — Копирует один или больше файлов на другое место.
CTTY — Изменяет терминальное устройство, используемое для управления вашей системой.
DATE — Отображает или устанавливает дату.
DEL — Удаляет один или более файлов.
DEBUG — Выполняет отладку, тестирование программ и редактирование инструментальных средств.
DIR — Отображает список файлов и поддиректорий в директории.
DISKCOMP — Сравнивает содержимое двух дискет.
DISKCOPY — Копирует содержимое одной дискеты на другую.
DOSKEY — Редактирует командные строки, восстанавливает команды Windows и создает макрос.
ECHO — Отображает сообщения, или включает/выключает вывод команд.
EMM386 — Включает/выключает поддержку расширенной памяти EMM386.
ENDLOCAL — Заканчивает локализацию изменений окружающей среды в *.BAT-файле.
ERASE — Удаляет один или более файлов.
EXIT — Прекращает выполнение программы «CMD.EXE» (интерпретатор команд).
EXTRACT — Средство извлечения информации из CAB — файлов.
FC — Сравнивает два файла или установки файлов, и отображает различие между ними.
FIND — Ищет текстовую строку в файле или файлах.
FINDSTR — Поиск строк в файлах.
FOR — Выполняет указанную команду для каждого файла в наборе файлов.
FORMAT — Форматирует диск для использования с Windows.
FTYPE — Отображает или модифицирует типы файлов, используемых в связях расширений.
GOTO — Направляет интерпретатор команд Windows NT к помеченной строке в *.BAT-файле.
GRAFTABL — Способность Windows отображать символы псевдографики, вставленные в графическом режиме.
HELP — Обеспечивает информацию Help для команд Windows.
IF — Выполняет обработку условия в *.BAT-файле.
KEYB — Конфигурирует клавиатуру для заданного языка.
LABEL — Создает, изменяет, или удаляет метку тома на диске.
LOADHIGH(LH) — Загружает программу в верхние адреса памяти.
MD — Создает директорию.
MEM — Отображает величину используемой и свободной памяти в вашей системе.
MKDIR — Создает директорию.
MODE — Конфигурирует системное устройство.
MORE — Отображает вывод одного экрана за раз.
MOVE — Перемещает один или более файлов из одной директории в другую на том же диске.
NETSTAT — Отображает статистики протоколов и текущих сетевых соединений TCP/IP.
NLSFUNC — Загружает информацию, специфическую для страны.
PATH — Отображает или устанавливает путь поиска для выполняемых файлов.
PAUSE — Приостанавливает обработку *.BAT-файла и отображает сообщение.
POPD — Восстанавливает предыдущее значение текущей директории, сохраненной по PUSHD.
PRINT — Печатает текстовый файл.
PROMPT — Изменяет подсказку к командам Windows.
PUSHD — Сохраняет текущую директорию, потом изменяет.
RD — Удаляет директорию.
RECOVER — Восстанавливает читаемую информацию с плохого или дефектного диска.
REM — Записывает комментарии (примечания) в *.BAT-файлы или CONFIG.SYS.
REN — Переименует файл или файлы.
RENAME — Переименует файл или файлы.
REPLACE — Заменяет файлы.
RESTORE — Восстанавливает файлы, которые были архивированы с использованием команды BACKUP.
RMDIR — Удаляет директорию.
SET — Отображает, устанавливает или удаляет переменные среды Windows.
SETLOCAL — Начинает локализацию изменений среды в *.BAT-файле.
SETVER — Устанавливает номер версии MS-DOS, который Windows сообщает программе.
SHIFT — Сдвигает позицию замещаемых параметров в *.BAT-файле.
SMARTDRV — Инсталлирует и конфигурирует утилиту кэширования диска SMART — драйва.
SORT — Сортирует входной поток.
START — Стартует отдельное окно для выполнения указанной программы или команды.
SUBST — Связывает путь с литерой диска.
SYS — Копирует файлы системы MS-DOS и интерпретатор команд на указанный вами диск.
TIME — Отображает или устанавливает системное время.
TITLE — Устанавливает заголовок окна для сеанса «CMD.EXE» .
TREE — Графически отображает структуру директория в драйве или путь.
TYPE — Отображает содержимое текстового файла.
VER — Отображает версию Windows.
VERIFY — Сообщает Windows, проверять ли правильность записи файлов на диск.
VOL — Отображает метку дискового тома и серийный номер.
XCOPY — Копирует файлы и деревья директории.
Также есть очень хороший форум, где куча готовых скриптов.
Командная строка, батникисценарии (bat, cmd) 

Предыдущая

Windowsntvdm.exe загрузка процессора на 100%

Следующая

WindowsОбзор Windows 8

Понравилась статья? Поделить с друзьями:
  • Выполнить не сохраняет историю windows 10
  • Выполнить настройку сетевого стека windows open server
  • Выполнить команду от имени другого пользователя windows
  • Выполнить команду nessuscli update d windows 10 x64
  • Выполнить дефрагментацию жесткого диска windows 10