2017-10-14 4 views
0

タイトルのとおりです。私は、コンソールのウィンドウの解像度、タイトル、およびテキストの色を変更するバッチスクリプトを持っています。終了すると、私は自分のスクリプトが元のものに戻ってそのすべてを元に戻すことを望みます。これはどのように可能ですか?コンソールウィンドウのサイズ、テキストの色、およびウィンドウのタイトルで動作する、pushdやpopdのようなコマンドはありますか?

+0

以前の質問にすべて戻って回答を受け入れてください。それほど大変なことはありません。 – Squashman

+0

私は理解していますが、回答が私の質問を満たしていることを確認するまで回答を受け付けません。私はこれまでにやったことがあり、何かがうまくいきませんので、私はもう一度尋ねます。私は応答を得ません。 – ditheredtransparency

+0

初めてコマンドプロンプトを開いたときにユーザーが表示される内容について話している限り、それは可能です。スクリプトの開始時(ユーザーがコマンドプロンプトを開いてスクリプトを開始するまでの間に_current_の値を変更した後)に_current_値を取ることについては、バッチでは不可能です。 – SomethingDark

答えて

1

このようにすべてのデータをさまざまなテキストファイルに保存することができます。

set /p title=Create a Title: 
title %title% 
break >"title.txt" 
echo %title% >>"title.txt" 

これはユーザーに好みのタイトル名を要求し、このタイトル名はテキストファイルに保存されます。さて、今からあなたがタイトルを設定するように、これを行うことができます。

if exist "title.txt" (
    set /p title1=<title.txt 
    title %title1% 
) 
set /p title=Create a Title: 
title %title% 
break >"title.txt" 
echo %title% >>"title.txt" 

この意志はない、それはタイトルのためにユーザーにプロンプ​​トが表示されますので、もしそれが、それに応じてタイトルを変更する場合は、ユーザはまだ、過去にタイトルを指定している場合は、最初のテスト。

+0

私は答えを感謝しますが、私はスクリプトが自動的に現在のタイトルを変数として保存して、スクリプトが終了したときにそれを復元できるようにします。 – ditheredtransparency

0

これらはいくつかの場所に保存されていますが、ほとんどはHKCU \ Consoleのレジストリにあります。また、デフォルトではcmdのタイトルはcmd.exeへのパスに過ぎませんが、ショートカットを介して開いた場合は、ショートカットの名前に変更されます。残念ながら、ショートカットの場所はWindows版ごとに異なります。コマンドプロンプトの開き方を決めることはできませんので、デフォルトのデフォルトタイトルを使用しています。

「その他のコードはここにあります」と記されたセクションに他のコードを貼り付けるか、call yourscript.batという行を付けてください。

@echo off 

::------------------------------------------------------------------------------ 
:: Store default values from the registry 
::------------------------------------------------------------------------------ 
call :get_rows_and_columns WindowSize 
call :get_rows_and_columns ScreenBufferSize 
call :get_HKCU_Console_value ScreenColors 
set "default_colors=%hkcu_value:~-2%" 

:: Leading zeroes get removed in a reg query which makes things complicated 
:: when the default background color is black 
set "default_colors=%default_colors:x=0%" 

::------------------------------------------------------------------------------ 
:: YOUR OTHER CODE HERE 
::------------------------------------------------------------------------------ 


::------------------------------------------------------------------------------ 
:: RESTORE CMD TO ITS ORIGINAL APPEARANCE 
::------------------------------------------------------------------------------ 
call :resize_console %WindowSize_cols% %WindowSize_rows% %ScreenBufferSize_cols% %ScreenBufferSize_rows% 

:: Google says the default cmd window title is the path to cmd.exe, which is 
:: stored in %COMSPEC%, but I've also seen it be based on the name of the 
:: shortcut in %APPDATA%\Microsoft\Windows\Start Menu\Programs\System Tools 
:: in Windows 10 or %APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories 
:: in Windows Vista. I don't have a 7, 8, or 8.1 VM so I don't know the paths 
:: for those. 
title %COMSPEC% 
pause 
exit /b 

::------------------------------------------------------------------------------ 
:: Gets the registry value of a specified key 
:: 
:: Arguments: %1 - the key to search for 
:: Returns: The value of the registry key 
::------------------------------------------------------------------------------ 
:get_HKCU_Console_value 
set "hkcu_value=" 
for /f "tokens=3" %%A in ('reg query HKCU\Console /v %~1 ^| find "%~1"') do set "hkcu_value=%%A" 
exit /b 

::------------------------------------------------------------------------------ 
:: Calculates rows and columns of a screen size based on registry value. 
:: According to https://stackoverflow.com/a/10664060/4158862, the decimal value 
:: of the registry key is equal to (rows*65536)+columns. 
:: 
:: Arguments: %1 - The registry key to search for 
:: Returns: The number of rows and columns used by that screen 
::------------------------------------------------------------------------------ 
:get_rows_and_columns 
set "key=%~1" 
call :get_HKCU_Console_value "%key%" 
set "%key%Size_hex=%hkcu_value%" 
set /a %key%Size_dec=%key%Size_hex + 0 
set /a %key%_cols=%key%Size_dec %% 65536 
set /a %key%_rows=%key%Size_dec/65536 
exit /b 

::------------------------------------------------------------------------------ 
:: Adjusts the size of both the command prompt window and its line buffer 
:: From https://stackoverflow.com/a/13351373/4158862 
:: 
:: Arguments: %1 - Columns in cmd screen width 
::   %2 - Rows in cmd screen width 
::   %3 - Columns in buffer width 
::   %4 - Rows in cmd screen width 
:: Returns: None 
::------------------------------------------------------------------------------ 
:resize_console 
mode con: cols=%1 lines=%2 
powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=%3;$B.height=%4;$W.buffersize=$B;}" 
exit /b 
関連する問題