Set p bat: set | Microsoft Learn

Пакетные файлы — Как… Проверить ввод из SET /P

Пакетные файлы — Как… Проверить ввод из SET /P

В сентябре 2014 г. компания The Security Factory раскрыла уязвимость, связанную со вставкой команд в сценарии командной оболочки (пакетные файлы), и стало ясно, что пакетные файлы могут быть уязвимы для эксплойтов.

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

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

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

 

Безопасное использование

SET /P приглашение для ввода

Проблема: Вставка кода

Удобный способ запросить ввод данных пользователем — встроенная в Windows команда SET :

 SET /P "Ввод=Пожалуйста, введите что-нибудь и нажмите Enter: " 

запросит ввод ( Пожалуйста, введите что-нибудь и нажмите Enter: ), примите весь ввод с клавиатуры, пока не будет нажата клавиша Enter, и сохраните ввод в переменной среды Введите .

Пока нет риска…

Попробуйте: при появлении запроса введите abc&ping ::1 и нажмите клавишу Enter.

Пока ничего особенного не произошло…

Введите команду SET Input , чтобы узнать, был ли ваш ввод сохранен в переменной среды Input :

 Ввод=abc&ping ::1 

Однако при вводе команды ECHO %Input% вывод будет выглядеть так:

 азбука

Пинг ::1 с 32 байтами данных:
Ответ от ::1: время <1 мс
Ответ от ::1: время <1 мс
Ответ от ::1: время <1 мс
Ответ от ::1: время <1 мс

Статистика пинга для ::1:
    Пакеты: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время прохождения туда и обратно в миллисекундах:
    Минимум = 0 мс, Максимум = 0 мс, Среднее значение = 0 мс 

Почему?

Объяснение состоит в том, что амперсанд действует как «разделитель команд»: все, что следует за (одиночным) амперсандом, будет интерпретироваться как новая команда.
ECHO %Input% оценивается как ECHO abc&ping ::1 , который, в свою очередь, интерпретируется как:

 ЭХО абв
пинг :: 1 
Примечание: Эта проблема аналогична уязвимости %CD% без кавычек, связанной со вставкой кода (хотя вероятность ее использования – пока меньше).

Для уязвимости %CD% без кавычек решение состоит в том, чтобы поместить переменную между двойными кавычками: "%CD%" ; это работает, потому что %CD% никогда не будет содержать двойные кавычки (если, конечно, эта динамическая переменная не имеет статического значения).
Однако с SET /P пользователь может ввести что угодно при появлении запроса, включая амперсанды и случайные двойные кавычки.

Предположим, мы должны поместить %Input% между двойными кавычками; попробуйте:

 ЭХО "%Ввод%" 

и на выходе будет:

 "abc&ping ::1" 

Пока хорошо выглядит. ..
Но теперь повторите команду SET /P и введите abc"&ping::1&echo"oops и посмотрите, что произойдет с ECHO "%Input%" :

 "азбука"

Пинг ::1 с 32 байтами данных:
Ответ от ::1: время <1 мс
Ответ от ::1: время <1 мс
Ответ от ::1: время <1 мс
Ответ от ::1: время <1 мс

Статистика пинга для ::1:
    Пакеты: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время прохождения туда и обратно в миллисекундах:
    Минимум = 0 мс, Максимум = 0 мс, Среднее = 0 мс
"ой" 

Ой, действительно!

Решение: расширение переменной с задержкой

До недавнего времени я считал, что безопасный разбор входных данных — это игра в кошки-мышки, и никогда не выиграют.

Затем Кан-Че Сун предложил гениальное и удивительно простое решение проблемы: используйте раскрытие переменной с задержкой!

Я прочитал вашу страницу о проверке SET /P и информации об уязвимости внедрения команд (которую я также обнаружил во время написания кода).
Мое личное решение состоит в том, чтобы просто использовать Delayed Expansion для этой переменной, и (согласно моему тесту) ничего не будет выполнено или неправильно проанализировано, и точка.

Я действительно считаю, что Delayed Expansion является окончательным решением этой проблемы SET /P, и с ним вам не нужны никакие трюки с эхо-конвейером для findstr.

 SETLOCAL EnableDelayedExpansion
SET /P var="Введите что-нибудь здесь:"
ЭХО .!вар!.
Кавычки полосы ECHO: .!var:"=!.
REM Если вы действительно хотите отклонить переменную с любой кавычкой...
ЭХО !вар! | НАЙТИ """" >NUL && SET var=
РЭМ Вот именно. 

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

Чтобы понять , почему это работает, нам нужно понять , как командный интерпретатор обрабатывает командные строки.

Цитируя Тимоти Хилла из его книги «Сценарии оболочки Windows NT» (текст, выделенный красным цветом, добавлен вашим покорным слугой):

  1. Все ссылки на параметры и переменные разрешаются [. ..].
  2. Составные команды разбиваются на отдельные команды, каждая из которых обрабатывается по отдельности в соответствии со следующими шагами [...].
    На этом этапе также обрабатываются линии продолжения.
  3. Задержанные ссылки на переменные разрешены. (1)
  4. Команда разделена на имя команды и аргументы.
  5. Если имя команды , а не указывает путь, оболочка пытается сопоставить имя команды со списком внутренних команд оболочки.
    Если совпадение найдено, выполняется внутренняя команда.
    В противном случае оболочка переходит к шагу 5.
  6. Если в имени команды указан путь, оболочка ищет по указанному пути исполняемый файл, соответствующий имени команды.
    Если совпадение найдено, выполняется внешняя команда (исполняемый файл).
    Если совпадений не найдено, оболочка сообщает об ошибке, и обработка команды завершается.
  7. Если в имени команды не указан путь, оболочка ищет в текущем каталоге исполняемый файл, соответствующий имени команды.
    Если совпадение найдено, выполняется внешняя команда (исполняемый файл).
    Если совпадений не найдено, оболочка переходит к шагу 7.
  8. Теперь оболочка ищет в каждом каталоге, указанном переменной среды PATH, в указанном порядке исполняемый файл, соответствующий имени команды.
    Если совпадение найдено, выполняется внешняя команда (исполняемый файл).
    Если совпадений не найдено, оболочка сообщает об ошибке, и обработка команды завершается.

Расширение переменной с задержкой происходит на шаге 3 (отмечено красным), тогда как вставка кода может происходить только на шаге 2.

Примечания: 1: Расширение переменной с задержкой (шаг 3, отмечен красным) не упоминается в книге Тима Хилла; этот шаг мне объяснил Кан-Че Сун.
  2: Шаги 5..8 описывают, как находится исполняемый файл для указанной команды, эти шаги не относятся к этому объяснению вставки кода.

Цитата из объяснения Кан-Че Сона:

  1. Расширение в процентах %var% и %1 ... %9
    (Этот шаг кратко объясняет, почему для токенов FOR нужны знаки двойного процента в сценариях. Поскольку этот шаг будет обрабатываться по-другому, если CMD находится в интерактивном режиме, то есть в режиме, в котором вы вводите команды)
  2. Разделение команд. Ручки "(" ")" "&" "|" Разделители "<" ">" (и новая строка).
    (Здесь происходит ввод команды.)
  3. Задержка расширения. В это время ( ) & | < > больше не является специальным и поэтому не будет разбиваться на дополнительные команды или каналы.
  4. Разделение слов. Технически это просто определяет, какая часть является командой (%0), а какая частью является аргументами (%*). В отличие от сценариев Unix, где все части аргументов ($1 $2 $3...) на этом этапе разделяются, оболочки Windows просто передают всю строку аргументов внешней (вызываемой) программе и позволяют ей обрабатывать ее самостоятельно. (Это объясняет, почему сценарии оболочки Unix допускают «$@» в дополнение к «$*».)
  5. Остальные шаги с 5 по 8 касаются определения путей к командам и поэтому для нас не имеют значения.

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

Следующий код проверит, содержит ли %Input% двойные кавычки, и если да, сотрет ввод:

 УСТАНОВИТЬ Ввод | НАЙТИ """" > NUL
ЕСЛИ НЕ ОШИБКА УРОВЕНЬ 1 УСТАНОВИТЬ Ввод = 

Аналогично, вы можете использовать FIND "&" для проверки наличия амперсандов или FINDSTR /R /C:"[&""|()]" для проверки всех "сомнительных" символов:

 (
УСТАНОВИТЬ ввод | FINDSTR/R/C:"[&""|()]"
ЕСЛИ НЕ ОШИБКА УРОВЕНЬ 1 УСТАНОВИТЬ Ввод=
) >НУЛ
 
Примечания: 3: Скотт Самнер отметил, что при перенаправлении вывода FINDSTR на NUL в пакетном файле код возврата ("ErrorLevel") всегда будет 0.
Именно поэтому для FINDSTR , перенаправление на NUL выполняется после того, как сначала проверит код возврата.
  4: Более короткий код SET Input | FINDSTR /R /C:"[&""|()]" && SET Input= не работает в Windows 7 (не тестировалось в других версиях Windows).
Хотя (SET Input | FINDSTR /R /C:"[&""|()]") && SET Input= работает с , вложенные круглые скобки, необходимые для перенаправления на NUL, могут привести к новым проблемам.
Мой совет — сделать это простым и безопасным и использовать тест IF NOT ERRORLEVEL 1 .

 

Альтернативы для

КОМПЛЕКТ/P

Вам не всегда нужен «бесплатный» ввод, часто вы хотите, чтобы пользователь выбирал только из списка вариантов.
В этом случае рассмотрите возможность использования CHOICE вместо SET /P

.

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

 


Последнее изменение страницы: 2016-09-19

Befehl набор

Befehl набор
Kurzbeschreibung Setzt od er löscht Umgebungsvariablen für CMD.EXE, oder zeigt sie an.
Синтаксис
 Объяснение: Dies ist ein internes Kommando.
Kommando zum Anzeigen der Hilfe: набор /?
Установить переменную Löscht Umgebungsvariablen для CMD.EXE, или установить ее.
SET [Переменная=[Zeichenfolge]]
  Переменная Bezeichnet den Namen der Umgebungsvariablen.
  Zeichenfolge Eine Zeichenfolge, die der Variable zugewiesen werden soll.
Der Befehl SET ohne Параметр zeigt die aktuellen Umgebungsvariablen an.
Wenn die Befehlserweiterungen aktiviert sind, wird SET folgendermaßen
Верандерт:
Wenn der SET-Befehl mit nur einem Variablennamen aufgerufen wird, d. h.
ohne Gleichheitszeichen oder einem anderen Wert, wird der Inhalt aller
Variablen angezeigt, deren Namen mit eben diesem Buchstaben beginnen. Так
верден дурч
    НАБОР Р
alle Variablen angzeigt, die mit dem Buchstaben 'P' beginnen.
Der SET-Befehl legt den ERRORLEVEL mit 1 fest, wenn der Variablenname nicht
в der aktuellen Umgebung gefunden wird.
Der SET-Befehl erlaubt kein Gleichheitszeichen als Bestandteil eines
Имена переменных.
Dem SET-Befehl wurden zwei neue Optionen hinzugefügt:
    НАБОР/A Ausdruck
    SET /P Variable=[EingabeaufforderungZeichenfolge]
Die /A-Option gibt an, dass die Zeichenfolge rechts vom Gleichheitszeichen
ein nummerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm
des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer
Anordnung mit abnehmendem Vorrang:
    () - Группа
    ! ~ - - monäre Operatoren
    * / % - арифметические операторы
    + - - арифметические операторы
    << >> - Logische Verschiebung
    & - битвайз UND
    ^ - Bitweise exklusives ЗАКАЗАТЬ
    | - битвайз ЗАКАЗ
    = *= /= %= += -= - Zuordnung
    &= ^= |= <<= >>=
    , - Trennzeichen für Ausdrücke
Wenn Sie einen der arithmetischen oder Moduloperatoren verwenden, müssen
Sie die Zeichenfolge für den Ausdruck in Anführungszeichen setzen.  Алле
nicht-nummerischen Zeichenfolgen im Ausdruck werden als Zeichenfolgen von
Umgebungsvariablen behandelt, deren Werte vor der Verwendung in Zahlen
конвертировать верден. Wenn eine Umgebungsvariable angegeben wird, die nicht
Definiert ist, wird für diese der Wert Null verwendet. Somit können Sie
mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben,
um deren Werte zu erhalten. Wenn der Befehl SET / A von der Befehlszeile,
д.ч. außerhalb eines Befehlsskripts ausgeführt wird, dann zeigt er
den endgültigen Wert des Ausdrucks an. Der Zuordnungsoperator erfordert
eine Umgebungsvariable auf der linken Seite des Operators. Числовое значение
stellen immer Dezimalzahlen dar, es sei denn, sie haben ein Präfix 0x für
шестнадцатеричный Zahlen, 0b для двоичного Zahlen или 0 для окталь Zahlen. Дамит
Stellt 0x12 Dieselbe Zahl wie 18 или 022 дар. Beachten Sie, dass die oktale
Schreibweise verwirrend sein kann: So sind 08 и 09Кейне Гюльтиген Зален,
да 8 и 9 Keine erlaubten oktalen Ziffern sind. 
Die Option /P ermöglicht es, einer Variablen eine Eingabezeile des Benutzers
zuzuweisen und zeigt die angegebene Eingabeaufforderung an, bevor die
Eingabezeile gelesen wird. Die Eingabeaufforderung kann leer sein.
Das Ersetzen von Umgebungsvariablen wurde folgendermaßen erweitert:
    %ПУТЬ:стр1=строка2%
Dies erweitert die PATH-Umgebungsvariable, wobei jede Instanz von "str1" im
erweiterten Ergebnis mit "str2" ersetzt wird. "str2" канн умирает лири
Zeichenfolge sein, um alle Instanzen von "str1" aus der erweiterten Ausgabe zu
löschen. Wenn "str1" mit einem Sternchen beginnt, steht "str1" для всех
zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Aufreten des
übrigen Abschnitts фон "str1".
    %ПУТЬ:~10,5%
Dies erweitert die PATH-Umgebungsvariable und verwendet dann nur fünf
Zeichen ab dem elften Zeichen (Offset=10) des erweiterten Ergebnisses. Венн умирает
Länge nicht angegeben ist, wird der Rest des Variablenwerts verwendet.
Wenn eine der Zahlen (Offset oder Länge) negativ ist, dann wird der angegebene
Wert der Länge des Umgebungsvariablenwerts hinzugefügt. 
    %ПУТЬ:~-10%
дополнительные параметры 10 Zeichen der Variable PATH.
    %ПУТЬ:~0,-2%
extrahiert alle, außer den letzten 2, Zeichen der Variable PATH.
Die Unterstützung der verzögerten Erweiterung von Umgebungsvariablen wurde
hinzugefügt. Standardmäßig ist sie deaktiviert. Sie kann mit der
Опция Befehlszeilenoption /V для CMD.EXE aktiviert/deaktiviert werden.
Siehe CMD/?
Die verzögerte Erweiterung von Variablen verbessert die Möglichkeiten der
Variablenerweiterung. Bisher wurden die Variablen beim Lesen des Texts, und
nicht bei dessen Ausführung, erweitert. Das folgende Beispiel zeigt ein
Проблема, das dabei auftritt:
    установить VAR=vorher
    если "%VAR%" == "vorher" (
        установить VAR=nachher;
        if "%VAR%" == "nachher" @echo Es funktioniert!
    )
Die Meldung würde nie angezeigt, weil %VAR% in beiden IF-Befehlen
beim Lesen des ersten IF-Befehls erweitert wird, weil es logisch zu diesem
gehört. Daher vergleicht der zweite IF-Befehl "vorher" mit "nachher" был nie
глейх сейн канн.  Auch das folgende Beispiel funktioniert nicht wie erwartet:
    установить СПИСОК =
    для %i в (*) установить LISTE=%LISTE% %i
    эхо %СПИСОК%
Es wird KEINE Liste der Dateien im aktuellen Verzeichnis erstellt, stattdessen
erhält LISTE den Namen der letzten Datei als Wert. Dies ist der Fall, Weil
%LISTE% nur einmal beim Lesen des IF-Befehls erweitert wird. Зу Дисем
Zeitpunkt ist LISTE читать.
Die FOR-Schleife, die tatsächlich ausgeführt wird, lautet:
    для %i в (*) установить LISTE= %i
Hiermit wird der Variablen LISTE immer wieder der letzte Dateinname
цугевизен.
 
Die verzögerte Erweiterung von Umgebungsvariablen erlaubt es, eine
Umgebungsvariable, unter Verwendung eines weiteren Zeichens (dem
Ausrufezeichen), zur Laufzeit zu erweitern. Mit aktivierter verzögerter
Erweiterung von Umgebungsvariablen können obige Beispiele wie folgt geschrieben
Верден:
    установить VAR=vorher
    если "%VAR%" == "vorher" (
        установить VAR=nachher
        если "!ВАР!" == "nachher" @echo Es funktioniert!
    )
    установить СПИСОК =
    для %i в (*) установите LISTE=!LISTE! %я
    эхо %СПИСОК%
Wenn die Befehlserweiterungen aktiviert sind, gibt es mehrere dynamische
Umgebungsvariablen, die zwar erweiterungsfähig sind, aber nicht in der Liste
von Variablen auftauchen, die mit SET angezeigt werden.  Diese Variablenwerte
werden bei jeder Werterweiterung der Variable dynamisch berechnet. Водопад Эйне
Variable mit einem dieser Namen definiert wird, dann überschreibt diese
Определение die unten stehende dynamische Определение:
%CD% - расширяет актуальную информацию Verzeichnisnamen.
%DATE% – расширение текущих данных для сравнения форматов
    wie der DATE-Befehl.
%TIME% - расширение zur aktuellen Zeit unter Verwendung desselben Formats
    wie der TIME-Befehl.
%RANDOM% - расширяется, если выбрано значение Dezimalzahl
    zwischen 0 и 32767.
%ERRORLEVEL% - расширение zum aktuellen ERRORLEVEL-Wert.
%CMDEXTVERSION% — расширение номера версии для актуализированных обновлений.
    für den Befehlsinterpreter.
%CMDCMDLINE% — расширение для ursprünglichen Befehlszeile, die den
    Шляпа Befehlsinterpreter aufgerufen.
 
Beispiele
Dateinamen zerlegen

Um einen completed Dateinamen - bestehend aus Laufwerk, Pfad und
Dateinamen - in seine Bestandteile zu zerlegen, gibt es mit dem
FOR einige Ersetzungsmöglichkeiten. Mit Hilfe der Ersetzungen kann
мужчина з.б. den Pfad, den Dateinamen und die Extension erhalten.

Bei sonstigen Zeichenketten kann man mit den Optionen
delims=[Trennzeichen] und tokens=[Nr.] arbeiten, um eine Zeichenkette
Зерлеген.

В nachfolgendem Beispiel wird der Pfad der win.com im Windows-Verzeichnis zerlegt:

 set sFullname=%windir%\win.com

для %%i в ("%sFullname%") установите sPATH=%%~di%%~pi
для %%i в ("%sFullname%") установить sFILE=%%~ni%%~xi
для /F "delims=.tokens=1" %%i в ("%sFILE%") установить sPart1=%%i
для /F "delims=.tokens=2" %%i в ("%sFILE%") установить sPart2=%%i


эхо sFullname=%sFullname%
эхо ПУТЬ=%sПУТЬ%
эхо sFILE=%sFILE%
эхо sPart1=%sPart1%
эхо sPart2=%sPart2% 

с.а. » %0 » для

Sonderzeichen ersetzen

Für eine Batchdatei, die Screenshots von Webseiten erstellt, habe ich den
Ausgabedateinamen anhand der URL erzeugt. Dabei muss man für Dateinamen
ungültige Zeichen aus der URL bereinigen - ich habe sie wie folgt durch einen
Unterstrich erstetzt: Eine Variable search nimmt alle Sonderzeichen auf,
Die ersetzt werden sollen. Über diese Liste von Zeichen wird mit einer
For-Schleife geloopt und die Variable mit dem Dateinamen der Ausgabedatei
myfile zeichzenweise ersetzt.

 (...)

:: Аусгабеверцейхнис
установить внешний каталог=...
(...)

:захватывать
установить "myurl=%~1"
установить "myfile=%~1"

SETLOCAL EnableDelayedExpansion
УСТАНОВИТЬ "поиск=: / . ? & = % "

для %%s в (!search!) do (
УСТАНОВИТЕ "myfile=!myfile:%%~s=_!"
)
установить мой файл=%мой файл%.png

:: Bildschirmfoto erstellen
IECapt --url="%myurl%" --out="%outdir%\%myfile%" --min-width=1200 --max-wait=5000
 

с.а. »

net send: an mehrere Benutzer Dieselbe Nachricht senden

Mit dem Kommando net send kann man einen Benutzer (bzw. Rechnernamen) eine Nachricht senden. Auch eine bestimmte Nachricht an die ganze Domain abzsetzen, ist mit einem einzelnen Aufruf möglich. Möchte man ausgewählte Benutzer/Rechner eine Botschaft senden, sind mehrere Aufrufe von net send erforderlich.

 @эхо выключено
 
:: Список эмпфенгеров:
установить список пользователей = джана суси мэри анна
 
:: Hier die Nachricht eintragen:
set sMsgText=Es gibt nun Kaffee und Kuchen fuer alle . .. Euer Axel
 
эхо на
для %%a в (%userlist%) сделать net send %%a %sMsgText%
@эхо выключено
 
эхо %0 было обнаружено.
Пауза
 

с.а. » echo » for » net send » pause

Ausgabe eines Befehls in eine Variable Holen

Zunächst muss man wissen, in welchem ​​Format die Ausgabe eines Kommandos daherkommt und wie man die gesamte Ausgabe nach der gewünschten Zeile filtern kann.

Oft steht die gewünschte Information dann auch nicht allein in der Zeile - dann muss man noch die anderen Informationen ausblenden. Am einfachsten ist dies mit der FOR-Schleife zu bewerkstelligen. Mit den Parametern TOKENS und DELIMS Lässt sich die Ausgabe effektiv beschneiden. Das Setzen der Variable erfolgt mit dem normalen SET Befehl. 9| найти "ProductId"') сделать [BR]
@set winSerial=%%a 2>ноль
удалить %sTMPFILE%
echo Серийный номер Windows=%winSerial%

так что держите человека в реестре в одной переменной - функция, связанная с файлом reg.exe, с кодом XP:
Hinweise:

  • Der erste Befehl könnte mehrere DNS-Server zurückgeben (wg. Альтернативный DNS-сервер als auch bei mehreren Netzwerkkarten) — укажите значение по умолчанию в For-Schleife nur der letzte Wert zurückgeliefert wird. Mehr zu dieser Eigenheit erfährst du nach Eingabe "для /?" в дер Kommandozeile.
  • Das Auffinden der Workgroup oder Domänesucht nach einem deutschen String. Bei einem anderssprachigen Betriebssystem funktioniert dieser Aufruf schon nicht mehr.
  • regedit exportiert immer alle untergeordneten Schlüssel. Unter XP sollte man reg einsetzen:
     reg QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion /v ProductId 

    Dies ist wesentlich schneller und einfacher zuschreiben (aber eben nicht kompatibel zu älteren Win-Versionen).
    Dieser Aufruf ermittelt den Ordner der History des IE (alles ist in eine Zeile zu schreiben):
    9| findstr /i "История"')
    Установите HistoryDir=%%i

с.а. » echo » find » findstr » for » ipconfig » net config » reg » regedit » введите

HTML-Ausgabe

Die Zeichen < und > haben in einer Batchdatei Ein- und Ausgabefunktionen. > >>%htmlout%

rem — запуск браузера
запустить %htmlout%

с.а. » echo » start

Статус командной строки с указанием цены и названия

Den Status der Arbeitsgänge kann man mit Hilfe von Bildschirmfarben kennzeichnen, z.B.

  • schwarzer Hintergrund und dunkelgraue Schrift, wenn ein Prozess arbeitet
  • blauer Hintergrund und weisse Schrift, wenn eine Benutzerinteraktion erwartet wird
  • zum Abschluss: grüner Hintergrund = OK oder roter Hintergrund = Fehler

Gerade, wenn ein Prozess länger dauert (Defragmentieren der Festplatte oder ein längeres Backup),
braucht man nicht immer ein geöffnetes cmd-Fenster. Mit Hilfe des Title-Kommandos kann
vor Start einer Aktion der Titelzeile ein (hilfreicher) Text eingeblendet werden. Данн Сихт Мэн
selbst bei verkleinertem cmd-Fenster in der Taskleiste, был gerade im Skript passiert.

Das nachfolgende Beispiel-Skript durchsucht rekursiv die Laufwerke (entpr. Переменная sDrive)
nach Dateien und/ oder Ordnern nach einem regulären Ausdruck im Ordner- und Dateinamen.

 @эхо выключено
рем ---------------------------------------------------------------------------
:: КОНФИГУРАЦИЯ
рем ---------------------------------------------------------------------------

установить scriptname = Dateisuche

:: zu durcsuchende Laufwerke
установить sDrives=C D E

:: Фарбен
установить colWork=цвет 08
установить colWait=цвет 17

рем ---------------------------------------------------------------------------
:: ОСНОВНОЙ
рем ---------------------------------------------------------------------------

%colWork%
название %scriptname%
эхо ххххх ЗАКАЗ/ ДАТА-ПОСОБИЕ ххххх
echo Dieses Skript sucht auf den Laufwerken %sDrives%
echo Ordner und Dateinamen nach einem angegebenen Muster (Regex moeglich).
%colWait%
set /p dmuster=Dateimuster eingeben:
если "%dmuster%"=="" выйти
%colWork%
для %%d в (%sDrives%) сделать (
title %scriptname% - durchsuche %%d nach %dmuster% ...
каталог /s /b %%d:\ | findstr "%dmuster%"
)
эхо фертиг.
title %scriptname% - фертиг.

Imacros | Все права защищены © 2021