After a sleepless night and after reading all answers herein, after reading a lot of SS64 > CMD and after a lot of try & error I found:
No, you can’t with pure redirection.
But with some tricks (like tee.bat) you can.
I try to explain the redirection a bit.
You redirect one of the ten streams with > file or < file
It is unimportant, if the redirection is before or after the command,
so these two lines are nearly the same.
dir > file.txt
> file.txt dir
The redirection in this example is only a shortcut for 1>, this means the stream 1 (STDOUT) will be redirected.
So you can redirect any stream with prepending the number like 2> err.txt and it is also allowed to redirect multiple streams in one line.
dir 1> files.txt 2> err.txt 3> nothing.txt
In this example the “standard output” will go into files.txt, all errors will be in err.txt and the stream3 will go into nothing.txt (DIR doesn’t use the stream 3).
Stream0 is STDIN
Stream1 is STDOUT
Stream2 is STDERR
Stream3-9 are not used
But what happens if you try to redirect the same stream multiple times?
dir > files.txt > two.txt
“There can be only one”, and it is always the last one!
So it is equal to dir > two.txt
Ok, there is one extra possibility, redirecting a stream to another stream.
dir 1>files.txt 2>&1
2>&1 redirects stream2 to stream1 and 1>files.txt redirects all to files.txt.
The order is important here!
dir ... 1>nul 2>&1
dir ... 2>&1 1>nul
are different. The first one redirects all (STDOUT and STDERR) to NUL,
but the second line redirects the STDOUT to NUL and STDERR to the “empty” STDOUT.
As one conclusion, it is obvious why the examples of Otávio Décio and andynormancx can’t work.
command > file >&1
dir > file.txt >&2
Both try to redirect stream1 two times, but “There can be only one”, and it’s always the last one.
So you get
command 1>&1
dir 1>&2
And in the first sample redirecting of stream1 to stream1 is not allowed (and not very useful).
Для включения/отключения режима отображения вводимых команд на экране используем:
Для вывода текста на экран консоли:
Показать текущий режим отображения команд:
Вывести на экран консоли сообщение «Привет!»:
Если файл не существует, он будет создан.
При выводе служебных символов, интерпретируемых командным процессором нужно использовать символ ^. Например, если вместо значения переменной %ERRORLEVEL%, нужно вывести текст «%ERRORLEVEL%», то нужно использовать написание ^%ERRORLEVEL^%.
<!– Put this script tag to the of your page –>
Few more ways.
1) The geekiest and hackiest – it uses the IEXPRESS to create small exe that will create a pop-up with a single button (it can create two more types of pop-up messages). Works on EVERY windows from XP and above:
;@echo off
;setlocal
;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1
;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1
;pause
;endlocal
;exit /b 0
[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=
[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=
2) Using MSHTA
. Also works on every windows machine from XP and above (despite the OP do not want “external” languages the JavaScript here is minimized). Should be saved as .bat
:
@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */
alert("Hello, world!");
or in one line:
mshta "about:<script>alert('Hello, world!');close()</script>"
mshta "javascript:alert('message');close()"
mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")
3) Here’s parameterized .bat/jscript
hybrid (should be saved as bat
). It again uses JavaScript despite the OP request but as it is a bat it can be called as a bat file without worries. It uses POPUP which allows a little bit more control than the more popular MSGBOX. It uses WSH, but not MSHTA like in the example above.
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0" "%~nx0" %*
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);
var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timed out";
var message="";
function printHelp() {
WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"] [-message \"pop-up message\"]");
}
if (WScript.Arguments.Length==1){
runPopup();
WScript.Quit(0);
}
if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
printHelp();
WScript.Quit(0);
}
if (WScript.Arguments.Length % 2 == 0 ) {
WScript.Echo("Illegal arguments ");
printHelp();
WScript.Quit(1);
}
for (var arg = 1 ; arg<args.Length;arg=arg+2) {
if (args.Item(arg).toLowerCase() == "-title") {
title = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-timeout") {
timeout = parseInt(args.Item(arg+1));
if (isNaN(timeout)) {
timeout=-1;
}
}
if (args.Item(arg).toLowerCase() == "-tom") {
timeout_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-pbm") {
pressed_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-message") {
message = args.Item(arg+1);
}
}
function runPopup(){
var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);
switch(btn) {
// button pressed.
case 1:
WScript.Echo(pressed_message);
break;
// Timed out.
case -1:
WScript.Echo(timeout_message);
break;
}
}
runPopup();
4) and one jscript.net/.bat
hybrid (should be saved as .bat
) .This time it uses .NET
and compiles a small .exe
file that could be deleted:
@if (@X)==(@Y) @end /****** silent jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
::if exist "%~n0.exe" goto :skip_compilation
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~f0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0
****** end of jscript comment ******/
import System;
import System.Windows;
import System.Windows.Forms
var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);
5) and at the end one single call to powershell that creates a pop-up (can be called from command line or from batch if powershell is installed):
powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")
6) And the dbenham’s approach seen here
start "" cmd /c "echo(&echo(&echo Hello world! &echo(&pause>nul"
7) For a system tray notifications you can try this:
call SystemTrayNotification.bat -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question
[object Object]– вывод на экран самих команд, а не только результат их выполнения. Так, если мы пропишем в сценарии следующую строку кода:

Для простоты запуска сценариев, пропишите в командной строке:
Path PATH;путь к папке
Вместо <путь к папке> пропишите путь к каталогу, в котором собираетесь хранить сценарий. Дайте сценарию простое имя, например, test.bat. Теперь в переменных окружения будет прописан путь к тестируемому сценарию, и вам не придется лишний раз делать переходы по папкам.
off Hello World
Хорошо, теперь последняя строка уже не отображается, но отображается первая, что не является показателем достигнутой цели, как это исправить, я покажу дальше, по ходу статьи.

off Hello Worldd:\work\hello.txt
В данном случае, если запустить сценарий с этим кодом из консоли командной строки (cmd), то в самом окне cmd отобразится первая строка кода, а в файл hello.txt запишется строка Hello World.

Давайте перепишем предыдущий пример:
off Hello Worldd:\work\hello.txt

Или можно так прописать:
Hello Worldd:\work\hello.txt d:\work\hello.txt
По теме данной статьи можно провести аналогию с сервером сценариев Windows Script Host, в котором объект WScript.Shell использует аналогичную команду эхо для вывода данных. Так же, если мне память не изменять, функция эхо применяется в языке программирования php. Тот, кто пробовал свои силы в различных языках программирования с легкостью сможет провести между ними аналоги и найти общие точки.
If we want to execute a series of commands/instructions we can do that by writing those commands line by line in a text file and giving it a special extension (e.g. .bat or .cmd for Windows/DOS and .sh for Linux) and then executing this file in the CLI application. Now all the commands will be executed (interpreted) serially in a sequence (one by one) by the shell just like any interpreted programming language. This type of scripting is called Batch Scripting (in Windows) and Bash Scripting (in Linux).
- Displaying messages: The echo command can be used to display messages or information on the console or in a text file. This is useful for providing feedback to the user, displaying error messages, or providing instructions.
- Displaying variables: Batch scripts often use variables to store information or data. The echo command can be used to display the value of a variable on the console or in a text file, making it easier to debug and troubleshoot scripts.
- Debugging: The echo command can be used to debug scripts by displaying the values of variables, commands, or system information. This can help identify errors and improve the efficiency of scripts.
- File output: The echo command can be used to redirect output to a file, making it easier to save and share information. This can be particularly useful when generating reports or logs.
- Script automation: Batch scripts can automate repetitive tasks, making them more efficient and less prone to human error. The echo command can be used to provide feedback and ensure that scripts are running as expected.
Advantages:
- Ease of use: The echo command is simple and easy to use, requiring minimal knowledge of scripting or programming. It can be used to display messages, variables, and system information quickly and easily.
- Debugging: The echo command can be used to debug scripts by displaying the values of variables, commands, or system information. This can help identify errors and improve the efficiency of scripts.
- Automation: The echo command can be used in conjunction with other batch commands to automate repetitive tasks. This can save time and reduce the likelihood of human error.
- Output redirection: The echo command can be used to redirect output to a file, making it easier to save and share information. This can be particularly useful when generating reports or logs.
- Customization: The echo command can be customized to display messages or information in different colors or formats, making it easier to distinguish between different types of information.
Disadvantages:
- Limited functionality: The echo command is limited in its functionality and can only be used to display messages, variables, and system information. For more complex operations, additional batch commands or scripting languages may be required.
- Formatting limitations: The echo command has limitations when it comes to formatting messages or information. It may not be possible to customize the formatting of text or add images or graphics to messages.
- Compatibility issues: The echo command may not be compatible with all versions of Windows or other operating systems. This can cause issues when sharing scripts or running scripts on different machines.
- Security concerns: The echo command can be used to display sensitive information, such as passwords or usernames. This information may be visible in the command history or log files, making it a security risk.
Step 1: Open your preferred directory using the file explorer and click on View. Then go to the Show/hide section and make sure that the “File name extensions” are ticked.
echo on echo "Great day ahead" ver
Explanation:
echo [<any text message to print on the screen>]
echo [<on> | <off>]
Using the ECHO command without any parameter:
echo
Printing a message on the screen using ECHO:
echo <any text message to print on the screen>
- By using echo on we can turn on command echoing i.e. all the commands in a batch file will also be printed on the screen as well as their outputs.
- By using echo off we can turn off command echoing i.e. no commands in the batch file will be printed on the screen but only their outputs, but the command echo off itself will be printed.
echo [<on> | <off>]
Let’s see the output.
Let’s see the output.
Using <@echo off>:
@echo off
Let’s see the output.
Printing the value of a variable:
Syntax:
set variable_name=value
echo %variable_name%
Note that we can put the %variable_name% anywhere between any text to be printed.
Concatenation of Strings:
Как писать скрипты на BATCH? 🤔
Все на самом деле проще, чем кажется. 😉
Вывод текста на экран
It's my the first script on BATCH!
It’s my the first script on BATCH!
У вас отобразятся команды, которые вы записали в ваш скрипт, а потом их результат.
Комментарии, кодировка и перенос строки
Комментарии
И даже так можно!
Кодировка
Допустим вы захотели вывести текст в консоль, который написан кириллицей, но при выводе возникает проблема? Что это за символы?!
Для этого следует указать интернациональную кодировку UTF-8:
chcp *сюда код кодировки* (65001 это UTF-8)
Привет, кириллица!
Перенос строк
Если у вас в коде имеется длинная строка, которую вы хотите перенести на другую строчку, чтобы визуально это смотрелось красиво и удобно, можно воспользоваться символом ^
:
У меня есть очень большой текст, который по сути бессмысленный и я придумываю этот текст на ходу, в прямом эфире и совершенно не важно, что здесь написано. С помощью ёлочки вверх, вы сможете перенести текст на следующую строку и это очень просто работает, но если вывести этот текст в консоль, он будет идти в строчку.
А что, если вы хотите вывести текст выше также, как это было и в коде? Эти ^
ёлочки не способны такого сделать, и тут можно сделать такую штуку:
Это можно сказать простая табуляция.Точнее обычная переменная, которая может спокойно перенести строчку на следующую. Переменные мы разберем в следующей главе.
Переменные
В BATCH переменные бывают глобальные 🔓 и локальные 🔒, изначально они все глобальные, а также их несколько видов.
Глобальные переменные можно использовать повсюду, в скрипте, другом bat-файле
, но только в текущей сессии. Что такое текущая сессия? 🤔 Простыми словами это открытая консоль в данный момент. Давайте разбираться, но для начала посмотрим, как можно создать самую простую переменную.
Simple variable
Любая переменная создается с ключевого слова set
, дальше можно указать тип переменной (необязательно), после обозвать её. Значения переменной указываются после символа =
без пробелов. Обычная переменная может содержать только строку (string).
Моя первая переменная, и сейчас я ее выведу на экран.
Hello, world!
Как вы наверное догадались, чтобы получить значение переменной, нужно обернуть название переменной в символы %
.
Другой вид переменной, числовой.
С такой переменной можно проводить математические операции:
Как мне сложить два числа?
/a
New year
New 2022 year
Также можно создать две разных переменных и сложить их воедино.
/a /a /a number1 number2 + =
100 + 899 = 999
Давайте расмотрим еще один вид переменной.
/p Enter some text:
script запускаем файл
Enter some text: Don’t worry, smile!
Don’t worry, smile!
Когда мы запускаем наш bat-файл
из консоли, мы можем передать любой аргумент после его названия: script Something
.
script – название нашего файла, Something – наш желаемый аргумент. Если мы попытаемся передать несколько слов (аргументов) через пробел, то у нас засчитает только первое слово. То есть каждое новое слово по сути является новым аргументом.
Этого можно избежать следующими способами:
- Указать больше переменных.
- Обернуть текст в кавычки
" "
- Указать символ
*
Способ первый:
Второй способ:
В этом способе я оберну текст в кавычки " "
Третий способ:
Также на основе таких переменных можно сделать небольшой калькулятор, для этого эту переменную нужно как-бы преобразовать в числовой тип:
/a %1
Локальные переменные
Локальные переменные задаются в блоке от setLocal
до endLocal
. Такими переменными нельзя воспользоваться за пределами блока, и также они недоступны в сессии, как глобальные.
I'm Global Elite I'm... I.. nobody?...
В принципе все просто.
Практика:
- Попробуйте написать скрипт, который будет принимать ваше имя и возраст, после выводить его на экран.
Ваше имя: Даниил
Ваш возраст: 17
Привет, Даниил, а знаю, что тебе 17 лет!
- Попробуйте сделать простой калькулятор, который будет только складывать числа.
Введите первое число: 12
Введите второй число: 12
Ответ: 24
Циклы
Цикл for (по умолчанию)
Данный цикл используется для повторения файлов, пример:
(C:\folder\fantasy.txt C:\folder\myths.txt) ( C:\Users\user\Desktop )
Разберем начало цикла, цикл создается с ключевого слова for
, следующим можно указать вид цикла /r
, /d
, /f
, /l
(необязательно). Вид цикла используется в разных ситуациях, в которых вы хотите его применить. Дальше в этом разберемся.
Переменная в цикле начинается с двух символов %%
, а после записывается само название (названием переменной должен служить 1 единственный символ). \
В ( )
записываем пути к файлам, с которыми в будущем будем осуществлять работу.
Работа осуществляется в теле цикла, чтобы туда попасть, нужно записать ключевое слово do
, открыть скобки ()
и приступить к написанию скрипта.
В этом случае, мы просто копируем файлы (fantasy.txt, myths.txt) в новую директорию.
Цикл for /R
Данный цикл используется для перебора файлов в директории:
/r C:\folder (*.txt) ( )
Здесь мы уже указываем команду /r
, следующим можно передать папку, которая будет считаться корневой, если не передавать директорию (C:\folder) – текущая директория будет считаться корневой. Также поиск файлов будет осуществляться и в подпапках.
%%f
– является переменной. В скобках ( )
, можно передать файлы, по которым будет осуществляться поиск. Их может быть несколько (*.txt *.py *.bat)
или можно записать .
, она будет искать все файлы в целом (в подпапках тоже).
Цикл for /D
Используется для загрузки списка папок, которые являются подпапками текущей директории:
C:\folder /d (f* n*) ( )
В данном примере мы получим список папок в директории C:\folder, которые начинаются с букв f
и n
. Если передать *
, мы получим список всех папок находящихся в директории.
Цикл for /l
Этот цикл служит для загрузки на ряде цифр (range of numbers):
/l (1, 1, 10) ( )
В этом примере мы выведим цифры от 1 до 10. \
/l (start, step, end) ( )
- start: Первое значение переменной
- step: После каждого повтора (iteration) значение переменной будет прибавлять ‘step’.
- end: Последнее значение.
Синтаксис
Параметры
Примечания
Если такой блок неудобно располагать в начале файла, то можно образовать из него процедуру, разместить в конце bat файла, а на исполнение вызвать эту процедуру командой call в начале bat файла. Из примера все должно стать понятнее))
Синтаксис
Параметры
Комментарии
Если используется в пакетном файле, Включение и вывод не влияют на параметр в командной строке.
Примеры
Чтобы вывести на экран пустую строку, введите:
Не включайте пробел перед точкой. В противном случае вместо пустой строки отображается точка.
Чтобы запретить вывод команд в командной строке, введите:
Если при выполнении пакетного файла будут обнаружены .txt файлы, отображаются следующие выходные данные (в этом примере предполагается, что файлы File1.txt, File2.txt и File3.txt существуют):
Формат командной строки:
В текстовый файл logfile.txt записывается дата и время начала работы командного файла, некоторые результаты и время завершения.
При выводе служебных символов, интерпретируемых командным процессором нужно использовать символ ^ . Например, вместо значения переменной ERRORLEVEL, нужно вывести текст “%ERRORLEVEL%”
Для подачи звуковых сигналов можно использовать вывод служебного символа с кодом 07 (BELL). Достаточно просто включить его в поток выходных данных, что зависит от возможностей редактора, который используется для написания командного файла. Можно использовать и стандартные возможности командной строки, добавив комбинацию CTRL+G :
Пакетные файлы полезны для автоматического запуска приложений. Основная область применения — автоматизация наиболее рутинных операций, что регулярно приходится совершать пользователю компьютера. Примерами таких операций могут служить — обработка текстовых файлов; копирование, перемещение, переименование, удаление файлов; работа с папками; архивация; создание резервных копий баз данных и т. п. Пакетные файлы поддерживают операторы if и goto (а в системах семейства Windows NT и расширенный оператор for), что позволяет обрабатывать результаты выполнения предыдущих команд или приложений и в зависимости от этого выполнять дальше тот или иной блок команд (как правило, в случае удачного завершения приложение возвращает 0 в переменной errorlevel; в случае неудачного — 1 или большее значение).
Пакетные файлы в DOS имеют расширение .bat; для других операционных систем они могут иметь другие расширения — например, .CMD в Windows NT
Программирование пакетных файлов появилось в MS-DOS и Windows с самого зарождения этих операционных систем. Командные интерпретаторы этих систем предлагают два режима работы: интерактивный режим (когда пользователь непосредственно вводит команды в командной строке и немедленно их исполняет) и пакетный режим (когда пользователь запускает предварительно записанную последовательность команд). Концепция обоих режимов была почерпнута из различных Unix—оболочек, равно как и из других текстовых интерфейсов командной строки начала 1980-х годов, таких как CP/M.
Существуют различные другие командные интерпретаторы, разработанные не компанией Microsoft и предоставляющие расширенный синтаксис команд для пакетного программирования. Примером может служить 4DOS.
Также имеются различные компиляторы пакетных файлов, превращающие пакетные файлы в исполняемые программы.
Редактирование bat файлов
Расширение BAT получилось от слова Batch(пакет).
Сохранять файл необходимо с расширением bat
Контекстное меню Windows предусматривает специальный пункт меню для редактирования этих файлов.
При выборе этого пункта откроется блокнот и сможете изменять файл.
Команды BAT файлов
Специальных команд, которые используются в BAT файлах не много. Именно специальных, которые могут пригодиться при создании логики командного файла. Конечно, эти команды относятся к внутренним командам MS DOS и могут использоваться в командной строке, но все-таки эти команды обретают смысл только в пакетных файлах.
Call – Вызов одного пакетного файла из другого
For – Запуск указанной команды для каждого из файлов в наборе
Goto – Передача управления в отмеченную строку пакетного файла.
If – Оператор условного выполнения команд в пакетном файле
Rem – Помещение комментариев в пакетные файлы и файл CONFIG.SYS
Shift – Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла
Кстати Вы можете легко получить подсказку по каждой этой команде в сеансе MS DOS используя ключ /?
Рассмотрим такой пример. Вы постоянно работаете с тремя файлами, которые находятся в разных каталогах жесткого диска, и часто создаете их резервные копии на USB-flash-drive. Для этого потребуется заходить в каждый каталог и копировать файлы по отдельности на флэшку.
Если написать простенький пакетный файл, то перечисленные действия сведутся к его запуску.
Предположим, что полные пути и имена файлов таковы: D:\Work\Profits.xls, D:\Home\Home.doc и C:\MyDocs\Oplata.doc, а G:\ – съемный флэш-диск для резервной копии. Тогда нужный пакетный файл будет выглядеть так:
Copy D:\Work\Profits.xls G:\Backup\
Copy D:\Home\Home.doc G:\Backup\
Copy C:\MyDocs\Oplata.doc G:\Backup\
Рассмотрим следующий пример. Многие пользователи иногда очищают содержимое временных каталогов. Для этого необходимо перейти в соответствующую папку (их может быть и две), выделить содержимое и удалить. После написания bat-файла очистка временных каталогов выполняется запуском файла с Рабочего стола. Итак, содержимое файла:
В BAT файлах можно использовать любые команды MS DOS. Смысл нашей программы будет в том, чтобы она создала папку и скопировала туда содержимое текущей папки.
В BAT файлах можно использовать любые команды MS DOS.
Смысл нашей программы будет в том, чтобы она создала папку и скопировала туда содержимое текущей папки.
- Echo off
- Cls
- Echo start backup
- Mkdir backup
- Copy *.* backup
- Echo end backup
Статьи к прочтению:
bat.Вирус.avi
Похожие статьи:
Он не удобен так как окно закроется через одну минуту, а в Win7 64x может даже не работать
и заголовок окна отличается от первого.
Как запустить несколько одноимённых процессов, каждый в своём отдельном окне?
Друзья! Остаётся только добавить, что у каждого процесса (hello.exe) свои аргументы: Вот нужно.
Простите, но Вы откуда взяли эту справку по HS_Message и какое у него вообще происхождение?
Есть ключ /time:99999
Я так понимаю что на первом скриншоте скомпилированный BAT-файл в файл.EXE (?.bat в hs_message.exe)
Окно hs_message взято как пример подобных окон с какой либо информацией.
В 64х разрядных системах код приведенный мною просто не выполняется.
Решение
По тому что Вы запускаете его из под 32-разрядной среды, а нужно либо из 64-разрядного файлового менеджера или из под Explorer-а двойным кликом по файлу .BAT. Читаем тему: MSG не является внутренней или внешней командой – именно из пакетного файла
Это вряд ли. В чистом BAT нет таких окон. Вы ссылки приведенные мною читали? Это может быть вирус.
Вы откуда скриншот взяли? Если запускали на своем компе – ему может стать плохо.
The Story Behind
[object Object]The Reasons
set NLM=^ set NL=^^^%NLM%%NLM%^%NLM%%NLM%
set nl=^&echo( set \n=^&echo(
> echo %\n%Hello%\n%World! echo & echo(Hello & echo(World! echo is ON. Hello World
I like short one-liners.
TL;DR
Set Newline Environment Variable …
… in the Current CMD Session
:: Sets newline variables in the current CMD session
set \n=^&echo(
set nl=^&echo(
… for the Current User
:: Sets newline variables for the current user [HKEY_CURRENT_USER\Environment]
setx \n ^&echo(
setx nl ^&echo(
… for the Local Machine
:: Sets newline variables for the local machine [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
setx \n ^&echo( /m
setx nl ^&echo( /m
Why just almost?
It does not work with double-quotes that are not paired (opened and closed) in the same printed line, except if the only unpaired double-quote is the last character of the text, e.g.:
set BEGIN_QUOTE=echo ^| set /p !=""" ... %BEGIN_QUOTE% echo %\n%...after newline. Before newline...%\n%...after newline"
It works with completely single-quoted texts like:
echo '%\n%...after newline. Before newline...%\n%...after newline'
Added value: Escape Character
:: Escape character - useful for color codes when 'echo'ing
:: See https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#text-formatting
set ESC=
For the colors see also https://imgur.com/a/EuNXEar and https://gist.github.com/gerib/f2562474e7ca0d3cda600366ee4b8a45.
2nd added value: Getting Unicode characters easily
A great page for getting 87,461 Unicode characters (AToW) by keyword(s): https://www.amp-what.com/.
Решаем практические задачи на батниках
Батники это не мощный язык программирования, но, в то же время, на нем можно решить много рутинных задач. Цель статьи не просто рассказать о возможностях Windows-консоли, а показать их, решая практические задачи с которыми мне приходилось сталкиваться.
Подтверждение выполнения
set answer= set /p answer="Выполнить? [y/n]:" if not "%answer%" == "y" exit /b
Устанавливаем переменную answer в пустое значение (необходимо, для того чтобы затереть предыдущее значение, например, если батник исполняется несколько раз). set с ключом /p устанавливает значение переменной, которое вводится пользователем. Проверяем значение переменной и если оно не равно y завершаем выполнение батника.
Как получить текущий месяц, день, год и т.п.?
В батниках есть возможность получать подстроку используя синтаксис %variable:~m,n% Где variable это название переменной m – индекс первого символа, а n – количество символов подстроки.
set fname=%date:~3,2%%date:~0,2%
Лично мне такое понадобилось для задания ключа /d для xcopy.
Как вывести пустую строку в лог-файл?
Я не сразу догадался, что это можно делать вот так: 🙂
echo.>> %logfile%
Предыдущая команда выполнена успешно?
В большинстве случаев это:
if %errorlevel%==0 ( echo OK>> %logfile% ) else ( echo ERROR #%errorlevel% >> %logfile% )
Архивирование файла с переменным именем
for %%i in (c:\dir\#fe*.*) do rar a -ep c:\other_dir\%%~ni.rar %%i
Задача состоит в том, чтобы заархивировать файл с именем, которое меняется ежедневно, но в другую папку. Следующим куском кода
for %%i in (c:\dir\#fe*.*) do
мы выбираем все файлы по маске, исполняя команду rar a -ep c:\other_dir\%%~ni.rar %%i для каждого, где %%~ni это только имя файла.
Имя текущего исполняемого батника
%~n0
Нужно, например, для того чтобы вести один лог для нескольких батников.
«Функция» в батниках
Если мы исполняем в одном батнике несколько повторяющихся команд, но с разными значениями переменных, то это можно реализовать так:
set thebat=c:\Program Files\The Bat!\thebat.exe set action=SEND set mailto=email_1@domain.com set subject=Subject_1 set attach=c:\dir\file???? call :mailit set mailto=email_2@domain.com set subject=Subject_2 set attach=c:\dir\file*.rar call :mailit … exit :mailit @echo on "%thebat%" /MAILTO="%mailto%";SUBJECT="%subject%";ATTACH="%attach%";%action% >> %logfile% @echo off exit /b
Таким образом, у меня отсылается десяток разных файлов разным получателям, используя The Bat! Такой файл читать и редактировать намного удобнее, чем это было бы десять команд The Bat! подряд.
Получить последний по дате создание файл
Для начала получим список всех файлов, отсортированных по дате модификации:
dir /b /od /a-d c:\dir\file_*.xls
И пройдемся по нему циклом.
for /f "tokens=*" %%a in (' dir /b /od /a-d c:\dir\file_*.xls ') do set "lastfile=%%a"
Логично, что по завершению цикла в переменной %lastfile% у нас будет последний по дате модификации файл 😉
Выкачать файл по FTP
ftp -s:file_to_ftp.txt 127.0.0.1
Где файл file_to_ftp.txt будет у нас выглядеть следующим образом:
login password bin cd /files put file.xls quit
Создаем нумерованные каталоги с инкрементом на единицу
set dir_last= for /f "tokens=*" %%i in ('dir /ad /b') do set dir_last=%%i if '%dir_last%'=='' (set dir_last=000) set dir_last=1%dir_last% set /a dir_last = %dir_last% - 1000 set /a dir_new=%dir_last% + 1 set dir_new=00%dir_new% set dir_new=%dir_new:~-3% md %dir_new%
Разобраться в коде предлагаю вам самим. 🙂 Основная возможность, которую я хотел показать данным примером, это использование ключа /a команды set для вычисления выражений. 😉