Подтвердить что ты не робот

Как сделать пакет Windows script полностью бесшумным?

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

Ниже приведен фрагмент одного из моих текущих скриптов:

@ECHO OFF
SET scriptDirectory=%~dp0
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat
FOR /F %%f IN ('dir /B "%scriptDirectory%*.noext"') DO (
del "%scriptDirectory%%%f"
)
ECHO

Результат:

C:\Temp> test.bat
        1 file(s) copied.
File Not Found
Echo is off.

C:\Temp>

В то время как "1 файл скопирован". просто раздражает, "Файл не найден" заставляет пользователя думать, что что-то пошло не так (чего у него нет - никаких файлов не будет).

4b9b3361

Ответ 1

Чтобы подавить вывод, используйте перенаправление к NUL.

Существует два вида вывода, которые используют консольные команды:

  • стандартный вывод или stdout,

  • стандартная ошибка или stderr.

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

>NUL подавляет стандартный вывод и работает нормально, например. для подавления сообщения 1 file(s) copied. команды copy. Альтернативный синтаксис 1>NUL. Таким образом,

COPY file1 file2 >NUL

или

COPY file1 file2 1>NUL

или

>NUL COPY file1 file2

или

1>NUL COPY file1 file2

подавляет весь стандартный вывод copy.

Чтобы подавить сообщения об ошибках, которые обычно печатаются на stderr, используйте 2>NUL. Таким образом, чтобы подавить сообщение File Not Found, которое DEL выводит, когда, ну, указанный файл не найден, просто добавьте 2>NUL либо в начале, либо в конце командной строки:

DEL file 2>NUL

или

2>NUL DEL file

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

IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext"

Ответ 2

Если вы хотите, чтобы весь нормальный вывод вашей партии script был тихим (как в вашем примере), самый простой способ сделать это - запустить пакетный файл с перенаправлением:

C:\Temp> test.bat >nul

Этот метод не требует изменения одной строки в script, и на экране все еще отображаются сообщения об ошибках. Чтобы подавить весь вывод, включая сообщения об ошибках:

C:\Temp> test.bat >nul 2>&1

Если ваш script имеет строки, которые выводят вывод, который вы хотите отображать на экране, возможно, будет проще добавить перенаправление к этим линиям, а не всем строкам, которые вы хотите сохранить:

@ECHO OFF
SET scriptDirectory=%~dp0
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat
FOR /F %%f IN ('dir /B "%scriptDirectory%*.noext"') DO (
del "%scriptDirectory%%%f"
)
ECHO
REM Next line DO appear in the screen
ECHO Script completed >con

Антонио

Ответ 3

Просто добавьте >NUL в конец строк, создающих сообщения.

Например,

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL

Ответ 4

Вы можете перенаправить stdout на nul, чтобы скрыть его.

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul

Просто добавьте >nul к командам, из которых вы хотите скрыть вывод.

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

Ответ 5

Копирует каталог с именем html и все его содержимое в целевой каталог в бесшумном режиме. Если целевой каталог отсутствует, он все равно будет его создавать.

@echo off
TITLE Copy Folder with Contents

set SOURCE=C:\labs
set DESTINATION=C:\Users\MyUser\Desktop\html

xcopy %SOURCE%\html\* %DESTINATION%\* /s /e /i /Y >NUL

  • /S Копирует каталоги и подкаталоги, кроме пустых.

  • /E Копирует каталоги и подкаталоги, включая пустые из них. То же, что и /S/E. Может использоваться для модификации /T.

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

  • /Y Подавляет запрос на подтверждение того, что вы хотите перезаписать                 существующий файл назначения.