コマンドプロンプト作業の基本

コマンドプロンプトを起動する方法はいろいろありますが、その設定を他でも使えるようにする為にショートカットを作成します。

基本設定



💘 運用は、ショートカットの名前です。実行した時のタイトルになります。


※ 真ん中のコマンド履歴は F7 で表示されます

💘 作業フォルダは、実行時のフォルダになります
💘 ショートカットキーは、このショートカットを実行します
💘 リンク先のコマンドに引数を指定して実行中に使用可能な簡易コマンドを登録してます

C:\Windows\System32\cmd.exe /k set r=cd %cd%& set c=prompt $g& set p=prompt $p$g
🍊 /k は cmd を実行した後 /k 以降を実行してそのままウインドウを閉じないと言う意味です
🍋 & は複数の処理を順に実行する為の区切り文字です
🍌 %cd% は実行時変数で、現在のフォルダがセットされています
🍍 set r=cd %cd% によって、%r% で最初のフォルダに移動できます
🍎 set c=prompt $g によって、%c% でプロンプトのフォルダ表示なしです
🍏 set p=prompt $p$g によって、%p% でフォルダ表示のプロンプトです
フォント設定 デフォルトで問題ありません。過去ではラスターフォントでしたが、今は ttf であるべきだという説明があります。 背景色設定 キャプチャして印刷時に背景が黒だとトナーの無駄になります。( 文字色も黒に変更します ) 実行中の変数 set コマンドで表示される一覧以外に以下のようなものがあります
🍊 %cd% : 現在のフォルダのパス
🍋 %random% : ランダムな整数値
🍌 %date% : 現在の日付
🍍 %cmdcmdline% : 実行中の cmd.exe 引数( & 以降は表示されない )
基本的なコマンド
🍊cls画面クリア
🍋titleタイトル文字列の変更
🍌prompt入力プロンプト文字列変更
🍍echo引数を表示します
🍎typeテキストファイルを表示します
実行中のプログラムの終了 💘 CTRL + C です ※ コマンドウインドウごと強制終了が必要な場合は、タスクマネージャを簡易表示にして『タスクの終了』を実行します。 画面スクロールを一時停止したい場合 💘 表示中に CTRL + S です が、表示速度が速く通常は都合よく止められ無いので コマンド | more を使います 疑似フルスクリーン 💘 疑似フルスクリーン は ALT + Enter です(F11でもよい)。デスクトップいっぱいに表示します。元に戻すのも ALT + Enter です ヘルプの表示
通常は引数に /? で表示されますがものによっては引数無しで実行したりする場合もあります。また、日本語以外のソフトの場合、 --help や -help を引数にしてみるといいでしょう。
※ コマンドプロンプト実行中のヘルプは help です UTF8 へ変更
めったに使う事は無いですが、UTF-8 のテキストを表示したい場合に使えます
mode con cp select=65001
※ SHIFT_JIS に戻すの時は 932 を使用します ※ chcp 65001, chcp 932 でも同等です

コマンドプロンプトとフォルダを相互に効率良く使う

エクスプローラからコマンドプロンプト

フォルダの参照はエクスプローラで素早く行う事ができますが、そのフォルダでコマンドプロンプトを開くのはそう簡単ではありません。そこで SHIFT キーを押しながら右クリックで PowerShell を開く事ができるようになっているので、PowerShell から cmd と入力するとコマンドプロンプトを利用できます。

しかし、以下の参照先の方法でコマンドプロンプトを直接開くメニューを登録できます。

エクスプローラを右クリックしてそのフォルダで「コマンドプロント」を開くメニューを追加する

コマンドプロンプトからエクスプローラ

コマンドプロンプトが実行中のフォルダで、エクスプローラを開くのはとても簡単です。以下のように入力して下さい。

start .
この方法はたまたまですが、PowerShell のウインドウでも同じ効果を発揮します。 CD コマンドで『ワイルドカード』を使用する CD コマンドは Change Directory の意味で、引数に移動先のフォルダのパスを相対または絶対参照で移動します。その際、全てのフォルダの文字列を入力する必要は無く、ワイルドカードが使えるので、C:\Program Files に移動する場合以下のように実行できます。
cd \prog*
それよりもっと簡単なのは『環境変数』を使う方法です。例えばテンポラリフォルダに移動するには以下のように入力します
cd %temp%
エクスプローラのアドレスでは、環境変数の入力のみで移動できます。よく使う必要のあるフォルダがあるのであれば、環境変数にフォルダのフルパスを登録しておくのは良い方法です。 PUSHD と POPD コマンドで2か所を移動
pushd %temp%
このように入力すると、cd %temp% と同様にフォルダを移動します。ただ、この場合 popd と入力すればすぐ元の場所へ戻れます。 Shell コマンドで開く 今は Microsoft の正式ドキュメントを見つける事はできませんが、こちらを参照すると、shell:キーワード で特別なフォルダを開く事ができる事が解ります。これらは、『ファイル名を指定して実行』や『エクスプローラのアドレス』で入力できます。ただし、コマンドプロンプトから実行するには以下のように入力します。
start shell:startup
Change which apps run automatically at startup in Windows 10 Shell と呼ばれるプログラミングの資料には、ShellSpecialFolder というものがあり、この中の定数文字列の殆どが実際利用できます。 以下はそれを確認するバッチファイルのサンプルです。
start shell:DESKTOP
pause
start shell:PROGRAMS
pause
start shell:PERSONAL
pause
start shell:FAVORITES
pause
start shell:STARTUP
pause
start shell:RECENT
pause
start shell:SENDTO
pause
start shell:NETHOOD
pause
start shell:FONTS
pause
start shell:TEMPLATES
pause
start shell:APPDATA
pause
start shell:PRINTHOOD
pause
start shell:COOKIES
pause
start shell:HISTORY
pause
start shell:WINDOWS
pause
start shell:SYSTEM
pause
start shell:PROGRAMFILES
pause
start shell:PROFILE
pause
start shell:SYSTEMx86
pause
start shell:PROGRAMFILESx86


この中で、ちょっと重要なのは以下のコマンドですね( 32ビットアプリケーションはいまでもとても重要です )

start shell:SYSTEMx86

C# を PowerShell で実行 : メッセージボックスの応答結果をファイルに書き込む ( バッチファイルで利用可能 )

まずは動作確認の為、VisualStudio でコードを完成させます。
using System;
using System.IO;
using System.Windows.Forms;

namespace MessageBoxConsole
{
	class Program
	{
		static void Main(string[] args)
		{
			// テンポラリフォルダのパスを取得
			string path = Environment.GetEnvironmentVariable("temp");

			// 書き込むファイルのフルパスを編集する
			string writePath = $@"{path}\_check_result";

			// MessageBox を表示する( System.Windows.Forms の参照が必要です )
			// ※ OK か Cancel のボタンが表示されます
			DialogResult check = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel);
			using (StreamWriter sw = new StreamWriter(writePath, false))
			{
				// OK ならば、ファイルに 1 を書き込みます
				if (check == DialogResult.OK)
				{
					sw.Write("1");
				}
				// CANCEL ならば、ファイルに 0 を書き込みます
				else
				{
					sw.Write("0");
				}

				// ファイルを閉じます
				sw.Close();

			}
		}
	}
}

▼ System.Windows.Forms の参照


次に PowerShell のスクリプトを作成して C# のコードを実行させます。その為に、PowerShell でスクリプトの実行を許可する手順 で設定を済ませておきます。

msgbox.ps1
$code = @"
using System;
using System.IO;
using System.Windows.Forms;
public class MyClass {
	public static void Main() {

		// テンポラリフォルダのパスを取得
		string path = Environment.GetEnvironmentVariable("temp");

		// 書き込むファイルのフルパスを編集する
		string writePath = string.Format( @"{0}\_check_result", path );

		// MessageBox を表示する( System.Windows.Forms の参照が必要です )
		// ※ OK か Cancel のボタンが表示されます
		DialogResult check = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel);
		using (StreamWriter sw = new StreamWriter(writePath, false))
		{
			// OK ならば、ファイルに 1 を書き込みます
			if (check == DialogResult.OK)
			{
				sw.Write("1");
			}
			// CANCEL ならば、ファイルに 0 を書き込みます
			else
			{
				sw.Write("0");
			}

			// ファイルを閉じます
			sw.Close();

		}

	}
}
"@

Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms")

[MyClass]::Main()


テキストファイルに結果を出力しているので、以下のようなバッチファイルで利用する事ができます
echo off

echo 処理を開始しました

powershell .\msgbox.ps1

FOR /F %%i IN (%temp%\_check_result) DO (
	if "%%i"=="1" goto :ok
	if "%%i"=="0" goto :cancel
)

:ok
echo OK を選択しました
goto :end

:cancel
echo Cancel を選択しました
goto :end


:end





コマンド リダイレクト演算子を使用する( Using command redirection operators )

✅ Microsoft ドキュメント
コマンド リダイレクト演算子を使用する

⭐ 単純な リダイレクト は > です。
 コマンドプロンプトに表示されるはずの文字列をファイルに書き込みます。

⭐ >> を使うと追加書き込みです。

このような記号は、リダイレクト演算子と呼ばれます。

STDIN

0

キーボード入力

STDOUT

1

標準出力

標準エラー出力

2

Error output to the Command Prompt window

0、1、2 は ハンドル番号で、既存のハンドルへのリダイレクトを指定するには、アンパサンド(&)文字の後にリダイレクトしたいハンドル番号を使用します。

なので、2>&1 は 標準エラー出力を標準出力にリダイレクトする事を意味します。

▼ 解りやすいテストはエラーだけに着目して、以下のように実行します。
C:\temp>dir x
 ドライブ C のボリューム ラベルは Windows10 です
 ボリューム シリアル番号は 40B9-7D17 です

 C:\temp のディレクトリ

ファイルが見つかりません
( x が存在しないので『ファイルが見つかりません』と言うエラーメッセージが出ます ) この『ファイルが見つかりません』は、dir x > message.txt としても message.txt には書き込まれまれずに、コマンドプロンプトに表示されます。 しかし、以下のようにすれば全て書き込む事ができます。
dir x > message.txt 2>&1
この方法は解りにくいですが、標準出力と標準エラー出力を同時にリダイレクトしたいときに意味があります。
dir x 2> message.txt
だと、ファイルが見つかりません だけが書き込まれてしまいます。 キーボード入力をファイル化 リダイレクト演算子を使用して、キーボードから入力した文字列をテキストファイルに書き込む事ができます。
type con > message.txt
type コマンドは、ファイルの内容をコマンドプロンプトに表示するコマンドですが、con と言う特殊な予約文字列を使用すると、キーボードをファイルとみなした動作を行います。 ※ 終了時は 改行入力後、CTRL+Z を入力してEnter です 空のファイルを作成する nul と言う予約文字列を使用して以下のように実行します
type nul > message.txt
実行結果を表示しない nul は存在しないファイルのようなものなので、標準結果への出力を無かった事にできます
dir *.* > nul
エクスプローラで作成できないファイルを作成する .(ドット) で始まるファイルはエクスプローラで作成できませんが、以下のようにすれば作成する事ができます
type nul > .htaccess
| (パイプ) で標準出力を標準入力に受け渡す sort コマンドは、標準入力をソートします。その際、標準入力へ渡す方法の一つとして |(パイプ) があります。
dir | sort
このようにすると、ソートした結果が表示されます。この際、データが多いと内容が一気に表示されてしまいます。この時、CTRL+S キーで一旦停止する事ができますが以下のようにすると表示できる単位で一旦停止をする事ができます。
dir | sort | more
続きはスペースキーで参照し、強制終了は CTRL + C となります。 < (リダイレクト入力) で標準入力にデータを渡す パイプ以外にも、標準入力のあるプログラム < ファイルのパス で標準入力にファイルの内容を直接渡す事ができます
sort < message.txt

コマンドプロンプトを『管理者権限』で実行する 8つの方法

Windowsキー + X のメニューから

タスクバーの左端を右クリックして表示されるメニューです。『コマンドプロンプト(管理者)』を使う事が可能です、無い場合は設定変更で表示できます。
【PowerShell を コマンドプロンプトに変更 ※説明あり

Windowsキー + S の検索から

cmd と入力して CTRL+SHIFT+Enter で管理者権限でコマンドプロンプトを表示できます

タスクマネージャーから

ファイルメニューより、新しいタスクの実行を選択する事で、管理者権限を付与してプログラムを実行できます



Windowsキー + R で cmd を実行してから

タスクバーに表示されている『コマンドプロンプト』を、CTRL+SHIFT を押しながらクリックします

ショートカット を作成してから

ショートカット作成時に cmd と入力すると参照後のショートカットが作成されます。そのショートカットを右クリックして『管理者として実行』を選択します。また、ショートカットタブの詳細設定より、『管理者として実行』をチェックしておくと常に管理者として実行できるようになります

VBScript を使う
Set obj = CreateObject("Shell.Application")
obj.ShellExecute "cmd.exe", "", "", "runas", 1


バッチファイル を使う

結局先ほどの VBScript のコードですが、バッチファイルにそれを作らして実行する事ができるので .bat として用意できます
@echo off
echo Set obj = CreateObject("Shell.Application"):obj.ShellExecute "cmd.exe", "", "", "runas", 1 > %TEMP%\_acmd.vbs
cscript %TEMP%\_acmd.vbs


PowerShell を使う

PowerShell そのものはいろいろ説明が面倒ですが、PowerShell を実行する時のオプションとして考えてもらうのが簡単です( エイリアスとかもありますけれど )
powershell -windowstyle hidden -command start cmd -verb runas
-windowstyle と -command は powershell のオプションで、start は powershell の内部コマンドである Start-Process のエイリアスで、-verb は start のオプションです

この場合、-windowstyle hidden はあっても無くてもあまり変わらないと思います。


PATH 環境変数をセミコロンで区切って一行づつ表示するバッチファイル( path-list.bat )

echo で VBScript の実行文を表示して、%temp%\_.vbs に書き出してそのまま実行するという、バッチファイルです。システム用とユーザ用を別々に作成して実行しています。

PATH コマンドの代りに使えます。

@echo off
echo ▼ システム
cmd /c echo Set ws=WScript.CreateObject("WScript.Shell"):Set wv=ws.Environment("SYSTEM"):pt=wv("PATH"):ad=Split(pt,";"):For I=0 To Ubound(ad):Wscript.echo ws.ExpandEnvironmentStrings(ad(I)):Next>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs
echo ▼ ユーザ
cmd /c echo Set ws=WScript.CreateObject("WScript.Shell"):Set wv=ws.Environment("USER"):pt=wv("PATH"):ad=Split(pt,";"):For I=0 To Ubound(ad):Wscript.echo ws.ExpandEnvironmentStrings(ad(I)):Next>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs
pause







スタートメニューの PowerShell をコマンドプロンプトに変更して、エクスプローラの右クリックからもコマンドプロンプトを実行できるようにする

タスクバーを右クリックして、『タスクバーの設定』を選択



コマンドプロンプトを PowerShell に置き換えるを オフにする



PowerShell は、エクスプローラでフォルダを SHIFT キーを押しながら右クリックして表示されるメニューであるので問題ありません。

エクスプローラを右クリックしてコマンドプロンプトを開きたい場合は、以下のレジストリをインポートします(右端のダウンロードアイコンでダウンロード / 拡張子 .reg )
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\Folder\shell\cmd]
@="コマンドプロンプト(&Q)"
 
[HKEY_CLASSES_ROOT\Folder\shell\cmd\command]
@="cmd.exe /s /k pushd \"%V\""

▼ 削除は以下です
Windows Registry Editor Version 5.00
 
[-HKEY_CLASSES_ROOT\Folder\shell\cmd]