Как скрыть командный файл после выполнения команды - PullRequest
0 голосов
/ 21 января 2019

Я сделал программу в блокноте, которая при запуске позволяет пользователю выбрать один из вариантов выбора.Каждый параметр - это время, которое, по сути, ведет обратный отсчет до тех пор, пока он не достигнет 0, компьютер сам блокируется.

Проблемы:

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

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

Приведенный пример кода:

@echo off

cls

title Shutdown timer

color 0a

:start

echo

echo Choose Your Time allocated

echo 1. 35 Minutes

echo 2. 65 Minutes

echo 3. 95 Minutes

echo 4. 125 Minutes

echo 5. 1 Minutes

set /p choice=Type which number for your choice

if not '%choice%'== set choice=%choice:~0,1%

if '%choice%'=='1' goto :Choice1

if '%choice%'=='2' goto :Choice2

if '%choice%'=='3' goto :Choice3

if '%choice%'=='4' goto :Choice4

If '%choice%'=='5' goto :Choice5

echo "%choice%" is not a valid option. Please try again

1 Ответ

0 голосов
/ 21 января 2019

Ты хочешь попробовать пакетный сценарий? Простое решение - просто скрыть командное окно. Это можно сделать с помощью командной оболочки .VBS, чтобы скрыть процесс командной строки. Оригинальный пост здесь .

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

Выше приведен скрипт для скрытия командных окон в VBS. Вы можете использовать этот скрипт, позвонив wscript.exe "Script" "Batch File". Довольно простой и легкий способ сделать это без сторонних инструментов.

Я объединил ваш скрипт, чтобы позволить создавать, экспортировать, использовать и удалять эти файлы. Ваш основной сценарий завершения работы также должен быть экспортирован в новый пакетный файл, который будет вызываться сценарием VBS. Это можно сделать с помощью блока кода ниже

Rem | Create Timer.bat
(
    Echo TIMEOUT /T %Time% /NOBREAK
    Echo rundll32.exe user32.dll,LockWorkStation
    Echo DEL "%%~f0"
)>> %Temp%\Timer.bat

Это создаст новый пакетный файл, содержащий команды выключения или блокировки. В этом случае rundll32.exe user32.dll,LockWorkStation заблокирует рабочую станцию ​​через X минут на TIMEOUT /T

StartTimmer.bat:

@echo off
title Shutdown timer
color 0a

:start
cls
echo Choose Your Time allocated:
echo(
echo 1. 35 Minutes
echo 2. 65 Minutes
echo 3. 95 Minutes
echo 4. 125 Minutes
echo 5. 1 Minutes
echo(
set /p "choice=Type which number for your choice: "

if "%choice%"=="1" set "choice=35" & goto ChoiceSellected
if "%choice%"=="2" set "choice=65" & goto ChoiceSellected
if "%choice%"=="3" set "choice=95" & goto ChoiceSellected
if "%choice%"=="4" set "choice=125" & goto ChoiceSellected
If "%choice%"=="5" set "choice=1" & goto ChoiceSellected

goto start

:ChoiceSellected

Echo Now Starting Timmer For %choice% Minutes

Rem | Do math - Covert Seconds To Minutes
Set /a "Time=%choice% * 60"

Rem | Create Timer.bat
(
    Echo TIMEOUT /T %Time% /NOBREAK
    Echo rundll32.exe user32.dll,LockWorkStation
    Echo DEL "%%~f0"
)>> %Temp%\Timer.bat

Rem | Export Hide Script & Use it
Echo CreateObject^("Wscript.Shell"^).Run """" ^& WScript.Arguments^(0^) ^& """", 0, False>> Hide.vbs
wscript.exe "%~dp0Hide.vbs" "%Temp%\Timer.bat"
del "%~dp0Hide.vbs"

goto :EOF

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

  • call /?
  • set /?
  • for /?
  • if /?
  • find /?
  • И так далее.
...