ラベル MS-DOSコマンド の投稿を表示しています。 すべての投稿を表示
ラベル MS-DOSコマンド の投稿を表示しています。 すべての投稿を表示

2019年10月31日木曜日

》Windowsコマンド:二つのフォルダを簡単に比較

簡単に、簡易的に、二つのフォルダを高速に比較する方法


 フリーソフトや拡張コマンド含め方法はいくつもありますが、その中でもお勧めなのは「robocoy」を使った比較方法です。
 一点だけ気を付ける点として、必ずオプション「/L」を付けて実行すること。
 使い方は「/?」を付けると出てきますが、その中の説明で「/L」は、

  "/L :: リストのみ - いずれのファイルにも、コピー、タイムスタンプの追加、または削除を実施しません。”

 とあります。

 よは、仮に実行したとして、こういった結果になると思うよ、という答えだけを返してきて、実際にはバックアップ/コピーはされないという事ですね。

 「robocoy」については以前こちらの記事でも書かせていただきました。

方法:


 例)
 robocopy (元のフォルダパス) (先のフォルダパス) /L

 これだけです。

 結果として、
  「新しいファイル云々~」
 とあれば、元にしかないファイルがあるとうことです。

 一番下の
  ディレクトリ:
  ファイル:
  バイト:
 等の後に数値が0以外のカウントがあればそれだけ差があるという事になります。


主な用途:


 USBメモリへのコピーや、DVDディスク等へのバックアップ、別HDDへの退避等を確認する方法として、コピーが成功しているか、差がないか、を簡単に知るには十分かと思います。


 ※フリーソフトを使っても良いという場合は、がぜん「WinMerge」をお勧めします。


- PDS PIS 研究室 室長 -

2019年9月10日火曜日

Windowsコマンドプロンプト:ネットワーク系コマンド一覧

Windowsネットワーク系コマンド一覧の備忘録


 いざという時に忘れがちで、覚えていてもそれでよかったのか、もっと便利なのはなんだったっけ?と思い出せなかったりするコマンドのうち、ネットワーク系を以下に列挙しておこうと思います。ネットワークトラブル発生時などに役に立てばと思います。
 尚、詳細は別途個別に書いていかないととてつもない量になってしまうので、ここでは主な用途や効果、簡易的な紹介と使い方程度で記載します。


  • hostname
  • ping
  • tracert
  • ipconfig
  • netstat



hostname


 「hostname」コマンドは、自身のPCのコンピュータ名(ノード名)を表示し返してくれます。

 hostname

 意外とGUIで“自分のPCのコンピュータ名を確認する”時にどこをどう開けばいいのか、最短を考えてしまいがちですが、どのみち必要ならコマンドプロンプトを立ち上げてしまい、このコマンドで確認するのはアリだと思います。
 ちなみにほかの方法なら、「set」や「systeminfo」等でもよいかもしれませんし、「コンピュータ」のアイコンがエクスプローラなどで出ているのであれば“右クリック”し「プロパティ」でもよいかと思います。



ping


 いわずと知れた、指定した相手先との通信を確認するのに使います。よほどのこと(対象のポートが塞がれている場合や意図せず落ちている、ネットワークケーブル自体が断線している等)がない限り同一セグメント内であれば疎通テストは十分に可能なはずで、帰ってこない場合はそれなりな異常と考えてよいレベルと判断できます。

 ping (相手方のIPアドレス、または名前解決可能なコンピュータ名)

 通っているようであれば、ほぼほぼ物理的なネットワークには異常がなく、大抵は論理的なネットワーク異常を疑っていくことになります。例えばファイアウォールで所定のポートが塞がれているケースや、IPアドレスだと通りコンピュータ名では通らないといった名前解決の問題など(があるある)です。

 他の用途として、-nオプションを使ったバッチ内タイマー的な用途で使ったりもします。旧世代の常套手段として。



tracert


 このコマンドでは、相手先までの“経路”を順にリスト表示していきます。手近な相手先だと相手の身が返ってくるのでpingと大して変わりませんが、例えばインターネット経由での相手先までの経路を確認する場合などにはとても役立ちます。どこのルーターを経由して回っているのか、どこで時間かかっているのか、等。pingが通らなかったときの第二選択コマンドといったところでしょうか。

 tracert (相手方のIPアドレス、または名前解決可能なコンピュータ名)

 中には対応していないルータもあるようで、必ずしもネットワーク異常がそこで起きている、とは言い切れない場合もあります。



ipconfig


 これもよく使います。一番多く使うのは、“自分のIPアドレス、またはMACアドレスを確認”する場合でしょうか。DHCPクライアントの場合は今のIPアドレスはわかりませんし。
 他には、そもそもネットワークアダプタがコンピュータとしてちゃんと認識されているかを確認する場合です。
 私はめんどくさいのでもっぱら/allオプションを付けて実行してしまいます。

 ipconfig /all

 ずらずらっと出てきますが、物理LANケーブルで接続しているコンピュータの場合は
  “イーサネット アダプター ローカル エリア接続:”
 といった項目の内容を確認することになります。無線LAN(Wi-Fi)の場合は、
  “Wireless LAN adapter Wi-Fi:”
 という項目になります。
 そしてその中の、例えばIPアドレスであれば
  “IPv4 アドレス...~~~~~”
 といった場所にIPアドレスが表示されます。
 MACアドレスは“物理アドレス”部になります。
 ※名称はOSや環境により若干違うかもしれません。

 接続されていない場合や、ネットワークが正しく確立されていない場合は、物理アドレスや各固定設定値のみが表示され、行がかなり少なくなっているのでそれらはつながっていないものとして見ることが出来ます。


 他にもマニアック(?)なコマンド多数ありますが、大抵上記の物でめぼしはつけれると思います。



netstat


 このコマンドはネットワーク自体というよりかは現在のネットワークポート状態を列挙することが出来ます。
 例えば、ポート80が開いているのか、や、何に使われているのかをPIDから追っかけていくためにリストアップします。
 そしてまた私はめんどくさいので必ず-naoを付けます(忘れないように「なお」と覚えてます)。

 tracert -nao

 ずらっと出てきますが、ポイントはローカルアドレスのポート番号部と、一番右のPIDの番号です。タスクマネージャを立ち上げ、左下の詳細をクリックし、詳細タブの列「PID」と整合確認すると、どんなアプリでそのポートが使用されているのかが確認できます。
 Webサーバーを立てている場合の競合状態や、ファイアウォール設定のためのネットワークゲームでのポート番号確認などできるかと思います。
 


- PDS PIS 研究室 室長 -










2019年8月29日木曜日

Windowsコマンドプロンプト:プロンプト変更&処理実行時間計測

コマンドプロンプトのプロンプト変更と便利な使い方


 コマンドプロンプトを起動すると、プロンプトが表示されると思いますが、アイディア次第でこのプロンプトを変更するとちょっとした便利な使い方が出来ることもあります。

 変更できる(表示できる)内容は以下の通り(詳細はヘルプ参照の事)

  • ユニーク文字列(以下記号を除く)
  • 環境変数(実は%%で括って使用可)
  • $A   & (アンパサンド)
  • $B   | (パイプ)
  • $C   ( (左かっこ)
  • $D   現在の日付
  • $E   エスケープ コード (ASCIIコード27)
  • $F   ) (右かっこ)
  • $G   > (不等号 (より大))
  • $H   バックスペース (直前の文字を削除)
  • $L   < (不等号 (より小))
  • $N   現在のドライブ
  • $P   現在のドライブとパス
  • $Q   = (等号)
  • $S     (空白)
  • $T   現在の時刻
  • $V   Windows のバージョン番号
  • $_   キャリッジ リターンとラインフィード
  • $$   $ (ドル記号)
(コマンド拡張すると以下も可能)
  • $+   PUSHDの階層数で+表記
  • $M    ネットワークドライブ→リモート名


変更方法:


 コマンドプロンプトにて、コマンド「prompt」の後に上記オプションを組み合わせて実行。

 例)ドライブとパス名の後にスペース開けてカッコを付けたユーザー名とスペース開けてシャープ(#)を表示するプロンプトへ変更(UNIX風?)

 prompt $P$S$C%USERNAME%$F$S#
 ↓(変更後の結果プロンプト)
 C:\Temp (TestUser) #
 
 ユーザー名が長かったりパスが深かったりするとプロンプトだけでかなり右の方にカーソルが行ってしまうので不便かもしれないですね。


実用例:


 夜中に時間のかかる処理を実行して帰る時に、プロンプトを日時へ変更しておくとコマンド終了した日時を表示させたままのコマンドプロンプトを残しておくことが出来ます。

 prompt $D-$T$S#
 

 1行目が上記設定コマンド行です。

 最初のpingは失敗例です。
 コマンドを入力している時間も経過してしまったため、
  2019/08/29-14:00:44.99 #ping -n 11 localhost > NUL 2>&1
  ↓
  2019/08/29-14:01:36.68 #
 約52秒も経ってます。。。
 -n 11 なので、約10秒になるはずですので。

 二回目と三回目のpingで、約10秒ちょいの時間経過になっていることがわかると思います。これは、一回目のコマンドを上キー「↑」で履歴を呼び出して再実行(コマンド入力時間を最小化)した結果です。コピペで実行しても同じことはできます。

 このような方法で、あらかじめコマンドプロンプトを日時に変更しておくことで、コマンド実行開始時間(厳密には前回のプロンプトが復帰した時間)から、コマンド実行後のプロンプトが復帰した時間が出せるので、経過時間を知ることが出来ます。

 時間のかかる処理(夜中の大容量コピーやバックアップ、変換など)を走らせて翌日まで放置しておく場合や、(ECHO ONしておけば)バッチプログラムでの一連処理においてどこで時間がかかっているのかを画面に残して確認し日々の効率化や高速化に役立てれればと思います。

 最後に。
 元に戻す場合は、「prompt」を空打ちしてください。
 prompt


- PDS PIS 研究室 室長 -

2019年8月22日木曜日

Windowsコマンド:「NUL」で標準出力と標準エラー出力を表示させない

WindowsのNULデバイスにリダイレクト


 以前、リダイレクトの方法について、標準出力、標準エラー出力のMS-DOSコマンドプロンプトでの使い方を紹介しましたが、(逆に)一切表示もファイル書き込みもさせたくない場合について書こうと思います。


NUL(ヌル)デバイス:


 古い話から入ると、UNIX系OSには“/dev/null”という特殊なシステムパス(スペシャルファイル)が存在していました。ここに入れられた情報データはすべて捨てられ、正しくEOF(エンド・オブ・ファイル)が返されるという(異次元の様な)場所です。
 例えば、印刷時に10ページ中の10ページ目は白紙なので印刷したくない→プリンタに投げる代わりにNULLに投げる→印刷されないと同時に正しくキューをぶん投げしたというアック(ACK)が返ってくる、というようなことにも使えました。
 Windowsでは、「nul」(大文字でも可)に投げることで似たような事を実現します。


実行例(dirの結果をリダイレクト):


 リダイレクトの詳細は以前書きましたので省略します。

 まず最初に、もともとどう表示されるかを適当なフォルダに移動したのち「dir」を実行し確認します。

 次に、リダイレクトを付けた後ろに“nul”を付けて実行してみます。大文字小文字どちられも可。
 dir > nul

 結果は何も表示されなくなったのがわかると思います。
 そしてもう一度「dir」を実行し、本来リダイレクトしたのだから出来ているであろう“ファイル”を確認しても「nul」というファイルはできていません。
 これが抹消された情報(dirの実行結果の文字列)という事になります。


 なお、上の画像では、あえて「null」という4文字だとどうなるのか?を後半で試しています。
 ファイルとして作成されました。
 Windowsでは、あくまでも「nul」という3文字がヌルデバイスファイル名という事ですね。

 また、適当なファイル名として「nul」が使えないことも確認できます。
 試しに「nul.png」というファイル名で画像を保存しようとした場合は以下のようにエラーが返ってきます。Windowsにより「予約されている名前」だそうです。


 ここで、以前の記事にもある「標準出力」と「標準エラー出力」の両方が表示される場合に、両方とも「nul」にぶん投げ抹消する方法を試してみました。

 最初の黄色の部分では、あえてエラーが出るような実行をしてみています。
 正しく「標準エラー出力」として“そんなファイルはみつかりませんねぇ~?”というのをお堅く返してきています。

 そしてその文言すら消し去る方法として、当たり前ですが、結果としては
 dir > nul 2>&1
 という書き方であれば両方の出力を「nul」にぶん投げることに成功します。


 めったに使うことはないかもしれませんが、DOSバッチでゴリゴリ何かさせたい場合で、かつ、実行中の表示を一部分だけファイル出力したくない場合などには有用です。

 例)
 ping -n 11 localhost > nul 2>&1
 →何も表示されず、10秒待機した後、復帰しプロンプトが帰ってます。
 DOSバッチでのなんちゃってタイマー的な使い方で古くからある常套手段。
 今となってはWindows10のTIMEOUTコマンドを使った方がいいのかもしれません(?)。なぜ今更実装したのか、意図はわかりかねます。もっと早くにあってもよさそうでしたが。。。



- PDS PIS 研究室 室長 -

2019年7月29日月曜日

Windowsコマンド:「>(リダイレクト)」で標準出力と標準エラー出力をファイルへ書き込む

「>(リダイレクト)」で標準出力と標準エラー出力をファイルへ書き込む方法


サンプル:


  dir test01 > test01.txt
  dir test02 > test02.txt 2> test02.txt
  dir test02 > test02.txt 2> test02.txt  ←×
  dir test02 > test03.txt 2> test04.txt
  dir test02 > test05.txt 2>&1

標準出力:


 標準出力とは、一言で言うと「プログラムが動作した結果や状況において“正常な状態”を“標準のデバイス”に出力する」ことを言います。
 ここで言う“標準のデバイス”は、DOSのコマンドプロンプトにおいてはディスプレイ(画面上の自身のウインドウ)を指します。
 よって、何かのコマンドを実行した結果が画面ウインドウ上に表示される状態を「標準出力」と小難しく言っただけです。
 しかしこれが意外と重要で、原理原則を理解しないと「>(リダイレクト)」を本質的に理解するのは難しくなります。


標準エラー出力:


 標準エラー出力とは、標準出力と基本的に動きは一緒ですが、2つ意味が違う部分があります。
 一つは、主にエラーや想定外の結果用の出力をするものであり、プログラム内部ではその役割をあえて分けて出力するようにプログラミングすることがほとんどです。
 二つ目に、「>(リダイレクト)」する上で、標準出力とは別に使い分ける必要があります。標準出力だけを「>(リダイレクト)」したとしても、エラーがあったときにそれは書き込まれません。エラーも書き込みたい場合はそれ相応の「>(リダイレクト)」記述をしてあげる必要があります。


 リダイレクト先についてですが、ここでは一般的なファイル(アスキーのテキストファイル)を前提に記載します。
 プリンターやテープなどの特殊なデバイスに向けたリダイレクト方法は省きます。


前提:


 以下の例では、実在するTest01というフォルダに対してdirをした場合と、実在しないTest02というフォルダに対してdirを実行した場合で試しています。



注意点:


 出力先のファイルはシングルリダイレクト(「>」)でファイルの先頭から上書きされ、ダブルリダイレクト(「>>」)でファイルの末尾に追記していきます。
 重要なファイルに誤って上書きや追記をしてしまわないよう注意が必要です。


使用例:

使用方法①:標準出力だけをテキストファイルに書き出す。

  dir test01 > test01.txt
または
  dir test01 1> test01.txt

 通常通り、標準出力結果が「test01.txt」に出力されます。
 標準エラー出力がない場合は画面に何も出ませんが、もし標準エラー出力があった場合は、例えば画面上に「ファイルが見つかりません」等のメッセージが出るだけで、ファイルには何も記述は残りません。
 通常は「>」で構いません。本来の「1>」と同義です。明示的に以下の②の標準エラー出力と分けてわかりやすくしたい場合は「1>」と記述するとおお行儀は良いかもしれません。


使用方法②:標準エラー出力だけをテキストファイルに書き出す。

  dir test01 2> test01e.txt

 標準エラー出力結果が「test01e.txt」に出力されます。
 標準出力がない場合は画面に何も出ませんが、もし標準出力があった場合は、画面に表示されます。


使用方法③:標準出力と標準エラー出力の両方を同名のテキストファイルに書き出す(ダメな例)。

  dir test02 > test02.txt 2> test02.txt

 これはやってはいけない方法です。標準出力と標準エラー出力を、それぞれ別のリダイレクトで出力するとファイルアクセスの競合が起きてしまいます。
 たいていの場合、「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」と表示され、テキストファイルはゼロバイトの物が出来上がります。※バッチなにかを作成した場合のゼロバイトファイルはこういったチョンボで作られる場合が多いです。
 尚、同じファイルに書き出したい場合は、以下の⑤の方法を使います。



使用方法④:標準出力と標準エラー出力の両方を別名のテキストファイルに書き出す。

  dir test02 > test03.txt 2> test04.txt

 これは問題ありません。それぞれのファイルに標準出力と標準エラー出力の情報が書き込まれます。
 ただし、デメリットがあり、エラーがあった際の流れ(タイミング)がわからなくなります。
 例えば1万行の標準出力があったとして、1行だけ標準エラー出力がありそれが第二のテキストファイルに書かれていたとして、1万行の中のどのタイミングでエラーが起きたのか?はタイムスタンプでも入れていない限り判断つかなくなります。
 もし一連の流れを加味して一緒のファイルに記述した方が良いということであれば、以下の⑤の方法がベターです。



使用方法⑤:標準出力と標準エラー出力の両方を同名のテキストファイルに書き出す(良い例)。

  dir test02 > test05.txt 2>&1

 この方法はよく使います。
 この場合、バッチで使っても、どこでエラーが起きたのか等、判断付きやすいです。
 ちなみに「2>&1」は、2>(標準エラー)の結果を、1>(標準出力)と同じデバイスに書き出しなさい、という意味と思えばよいと思います。
 ポイントは、明示的に“同じファイル”という事を指し示せているところでしょうか。上記③のダメな例では、「ファイル名が同じ」というだけであって、システム的には知らんという事になるのでしょう。

 実在しないフォルダにdirを実行し「2>&1」で出力したテキストファイルは以下のようになります。

 ドライブ C のボリューム ラベルは System です
 ボリューム シリアル番号は ****-**** です

 C:\TEMP のディレクトリ

ファイルが見つかりません

 最後の「ファイルが見つかりません」が標準エラー出力です。


 いかがでしたでしょうか。
 実際、たまにしか使わない方法なので「2>&1」をどう書くかしょっちゅう忘れてしまうことが多いです。(他のOSを触ったりすると混同してしまったり。。。)
 忘れてしまったらここを覗いて思い出す、そんな感じで。


ー PDS PIS 研究室 室長 -


2019年7月26日金曜日

Windowsコマンド:「|(パイプ)」で標準出力を渡す

「|(パイプ)」:

 使用例:


 systeminfoの実行結果をFindコマンドに渡し、「KB44」という文字列が含まれている行を列挙。

 systeminfo | find "KB44"



 前回は「systeminfo」コマンドでWindowsシステムの概略情報を抽出しましたが、そういった標準出力を別なコマンドに“渡す”方法として「|(パイプ)」を使ってそのまま受け渡すことが出来ます。
 ※小文字のエルでも数字の1でもありません。
  キーボード右上「¥」の所にある
  「|(パイプ)」
  です。
  「shiftキー」を押しながらです。

 上記の例では、「KB44~~~」というWindowsUpdateセキュリティパッチはインストールされているか?を即確認できます。
 もちろん、末尾まで入れて、「とある特定のKB限定」で探すことも出来ます。

 大抵の標準入力を受け付けてくれるコマンドであれば「|(パイプ)」でつなげて渡す/受け取ることが出来ます。
 また、多段で複数のパイプでつなぐことも出来ます(上記例にさらに追加例)。

 systeminfo | find "KB44" | find "04"
 
 この例では、上記のKB44の付く行の結果から、さらに"04"の文字が付くものに絞って抽出する連続技です。
 意味があるかどうかはさておき、こういった方法で多段連続複数パイプを使うことも出来ます。



 他には、以下の様な例もありますので、載せておきます。

 type (適当なテキストファイル) | more

 type (適当なテキストファイル) | sort

 dir | clip

 systeminfo | find "KB4" | sort | clip
 ↑最後の例では、以下のような動きになります。
 1.systeminfoコマンドの標準出力を、次のfindへ渡す
 2.findでは"KB4"という文字列が含まれる行を探し、次のsortへ渡す
 3.sortでは並び順を反転(/R)してソートし、次のclipへ渡す
 4.clipでは3の結果をクリップボードに格納(バッファ)する
 試しにメモ帳などに張り付け(ペースト)すると文字列が格納されていますね。

 また、リダイレクト「>」と組み合わせてファイル出力する方法も想定されます。
 追記:リダイレクトについてはこちらの記事で記載しました。

 ※標準出力や、クリップボードにはバッファサイズの上限があります。
 その文字数を超えると欠落したり、コマンドが落ちたりする場合がありますので長さの取り扱いには要注意で、あるはずの文字や情報がすっぱりなくなっているのに気づかない場合はあります。


- PDS PIS 研究室 室長 -




2019年7月24日水曜日

Windowsコマンド:「systeminfo」でWindowsシステム情報を参照&抽出


 コマンド名:

 systeminfo


 ※GUIで利用したい場合は、スタートメニューの「Windows 管理ツール」→「システム情報」を起動するとGUI版が立ち上がります。


systeminfoコマンドの出力例:


 Windows10上で出力される項目は以下の通り(「:」の後ろは出力例)。

 ホスト名:               ********(←コンピュータ名)
 OS 名:                  Microsoft Windows 10 Pro
 OS バージョン:          10.0.17134 N/A ビルド 17134
 OS 製造元:              Microsoft Corporation
 OS 構成:                メンバー ワークステーション
 OS ビルドの種類:        Multiprocessor Free
 登録されている所有者:   ********(←メーカー名等)
 登録されている組織:     ********(←組織名等)
 プロダクト ID:          ********(←数十桁のID)
 最初のインストール日付: 2018/07/20, 10:27:36
 システム起動時間:       2019/07/11, 8:15:13
 システム製造元:         ********(←メーカー名等)
 システム モデル:        ********(←モデル名等)
 システムの種類:         x64-based PC
 プロセッサ:             1 プロセッサインストール済みです。
                         [01]: Intel64 Family 6 Model 142 (~省略)
 BIOS バージョン:        ********(←BIOSのバージョンや日付等)
 Windows ディレクトリ:   C:\WINDOWS
 システム ディレクトリ:  C:\WINDOWS\system32
 起動デバイス:           \Device\HarddiskVolume2
 システム ロケール:      ja;日本語
 入力ロケール:           ja;日本語
 タイム ゾーン:          (UTC+09:00) 大阪、札幌、東京
 物理メモリの合計:       8,087 MB
 利用できる物理メモリ:   4,440 MB
 仮想メモリ: 最大サイズ: 24,871 MB
 仮想メモリ: 利用可能:   20,453 MB
 仮想メモリ: 使用中:     4,418 MB
 ページ ファイルの場所:  C:\pagefile.sys
                         D:\pagefile.sys
 ドメイン:               ********(←ADドメインサーバー名)
 ログオン サーバー:      ********(←ログオンしているドメインor自マシン名)
 ホットフィックス:       12 ホットフィックスがインストールされています。
                         [01]: KB4100347
                         [02]: KB4230204
                         [03]: KB4343669
                         [04]: KB4456655
                         [05]: KB4465663
                         [06]: KB4477137
                         [07]: KB4485449
                         [08]: KB4497398
                         [09]: KB4497932
                         [10]: KB4503308
                         [11]: KB4509094
                         [12]: KB4507435
 ネットワーク カード:    4 NIC(s) インストール済みです。
                         [01]: Realtek PCIe GbE Family Controller
                               接続名:           イーサネット
                               状態:          メディアは接続されていません
                         [02]: Intel(R) Dual Band Wireless-AC 3168
                               接続名:           Wi-Fi
                               DHCP が有効:      はい
                               DHCP サーバー:    ********(←DHCP-SVのIPアドレス)
                               IP アドレス
                               [01]: ********(←自マシンの現在のIPアドレス)
                               [02]: ********(←自マシンのMACアドレス)
                               [03]: ********(←自マシンの仮想MACアドレス)
                               [04]: ********(←自マシンの仮想MACアドレス)
                         [03]: Bluetooth Device (Personal Area Network)
                               接続名:           Bluetooth ネットワーク接続
                               状態:          メディアは接続されていません
                         [04]: Hyper-V Virtual Ethernet Adapter
                               接続名:           vEthernet (既定のスイッチ)
                               DHCP が有効:      はい
                               DHCP サーバー:    255.255.255.255
                               IP アドレス
                               [01]: ********(←自マシン内の仮想用IPアドレス)
                               [02]: ********(←自マシン内の仮想用MACアドレス)
 Hyper-V の要件:         ハイパーバイザーが検出されました。Hyper-V (~省略)

 ※いくつかの固有情報は「*」で隠してます。
 ※ホットフィックスの数が多い場合は途中で切られます(例:Win7)。


よく使いそうな出力項目:

  • コンピュータ名は?
  • ネットワークの設定状態は?
  • いつセットアップしたマシン?
  • ホットフィックスは何が入ってる?
  • ある特定のホットフィックスが入っていないか?
  • OSは?、ビルド番号は?
  • メモリ容量は?使用量(空き容量)は?
  • (ネットワーク越しで他のPCの情報)


コマンドオプション(「/?」ヘルプ表示引用):


 SYSTEMINFO [/S システム [/U ユーザー名 [/P パスワード]]] [/FO 形式] [/NH]
 
 説明:
     ローカル コンピューターまたはリモート コンピューターの、オペレーティング
     システム構成情報 (Service Pack のレベルを含む) を表示します。
 
 パラメーター一覧:
     /S    システム            接続先のリモート システムを指定します。
 
     /U    [ドメイン\]ユーザー 実行するコマンドのユーザー コンテキストを指定
                               します。
 
     /P    [パスワード]        提供されたユーザー コンテキストのパスワードを指定
                               します。省略された場合は、入力を要求します。
 
     /FO    形式               表示される形式を指定します。
                               有効な値: "TABLE", "LIST", "CSV"。
 
     /NH                       出力しない "カラム ヘッダー" を指定します。
 
                               "TABLE"と "CSV" の形式のみ有効です。
 
     /?                        ヘルプを表示します。
 
 例:
     SYSTEMINFO
     SYSTEMINFO /?
     SYSTEMINFO /S システム
     SYSTEMINFO /S システム /U ユーザー
     SYSTEMINFO /S システム /U ドメイン\ユーザー /P パスワード /FO TABLE
     SYSTEMINFO /S システム /FO LIST
     SYSTEMINFO /S システム /FO CSV /NH


主な用途:

  • 各マシン(リモート含む)のシステム情報をサッと集めたい
  • 自マシンの状態を簡易的にテキストで残しておきたい
  • スペックを色々質問する/されるのは大変→ファイル渡し
  • 自動でログインスクリプトやタスクで残し、集中管理したい




 意外と忘れてしまいがちですが、システム管理する上でちょっとした事なら結構有効な情報をサッと確認できるので覚えておくとかなり有効だと実感しています。


- PDS PIS 研究室 室長 -






2019年7月10日水曜日

Windowsコマンドプロンプト使うなら、最低限これだけは覚えるべし③:CD

<Windowsコマンドプロンプト使うなら、最低限これだけは覚えるべし③:CD>


 前回は「DIR」について記載しましたが、今回は共によく使う、というかこれをきちんと理解していないと意味がない「CD(CHDIR)」(チェンジディレクトリ)について書きます。
 この「CD」も単純に使ってしまえばそれだけで終わってしまいますが、きちんとマスターしておいた方が良い・便利な小技ありのコマンドの一つになります。

 <ポイント>

  • カレントディレクトリ(今いる場所)という概念
  • “絶対パス”と“相対パス”
  • 一つ上の階層、パスの区切り文字
  • ドライブは別(オプション/Dが必要)
  • スペース文字を含むパスはダブルクォート(”~~~”)で括る


カレントディレクトリ(今いる場所)という概念


 まず、コマンドプロンプトでは “今自分がどこにいるのか” をよくよく理解して操作しないと想定外の結果を生んでしまうことがあります。
 通常、プロンプト(コマンドプロンプトを起動した直後に表示される「C:\Users\~~~>」という文字列)に “今どこにいるか” は表示されます(設定で変更・非表示も可)。
 しかし本来であれば自分がどこにいるかはわかるはずもなく、エクスプローラのようにツリーで強調表示されるわけでもないので、明示的に「今どこにいるの?」を問い合わせるのがお行儀としては正しいです。
 問い合わせる方法として、「cd」だけで実行(通称空打ち)すると、
  今自分がいる場所(←カレントディレクトリ)
 を返してくれます。
 上記の場合、「C:ドライブ」の「Users」フォルダの下の「TestUser01」というフォルダの下にいる、という意味になります。プロンプト部にも同じ文字列が出ているので間抜けですが。。。


“絶対パス”と“相対パス”


 次に、パス(Path:階層の場所、住所~番地みたいなもの)の指し示し方として、通常は“絶対パス”を意識しがちですが、自然には“相対パス”が使われていることが多いため、その両方を説明します。

 絶対パス:

 最上位の場所~~~現在の場所までをすべて表したもの。
  例)
   (自分がどこにいようが)
   C:\Windows\Temp\Hoge.txt に対して云々

  他の例え)
   宇宙:\~~~\太陽系\地球\日本国\〇〇県\□□市\△△区\☆☆町\123\4\567\××さん

 相対パス:

 自分のいる場所から上記のHoge.txtをターゲットとした場合。
  例)
   (自分がC:\Windows\にいた場合)
   .\Temp\Hoge.txt
   Temp\Hoge.txt

   (自分がC:\Users\TestUser01\にいた場合)
   ..\..\Windows\Temp\Hoge.txt

   (自分がC:\Windows\Temp\にいた場合)
   .\Hoge.txt
   Hoge.txt


一つ上の階層、パスの区切り文字


 上の例で使っていますが、区切り文字には半角の「¥」を使います。
 英語フォントではバックスラッシュ「\」で表示されますが、同じ意味です。
 私の書いているこのブログではバックスラッシュになっちゃってますね。
 (Unix系OSは「/」で記述するので紛らわしいです。)

 一つ上の階層に移動や指し示す場合は、「..\」と、ドットを二つ重ねます。
 二つ上の場合は「..\..\」とつなげていく形で、いくつでもつなげて書きます。

 最後に「.\」という書き方があります。これは「今ここの」と明示的に指し示す場合に使います。
 上にも書きましたが今自分のいる場所にHoge.txtというファイルがあったとして、それを指示して何かしようとした場合、「.\Hoge.txt」と「Hoge.txt」は同じ意味になります。
 これは、ログオン/サインイン時のユーザー名でも同じです。
 じつはユーザー名の前にはコンピュータ名、またはドメイン名が付きます。
 指定しないでもログインできるのは、明示的に示していないだけで、暗黙で「このコンピュータ」という部分が省略・自動付与されていると考えてもらえればよいと思います。
 もし試してみる場合は、(ドメインユーザーでない場合は)ログオンユーザー名のところに、「.\(いつものユーザー名)」や、「(自分のコンピュータ名)\(いつものユーザー名)」でログインしてみてもらえればわかると思います。


ドライブは別(オプション/Dが必要)


Windowsでは「ドライブ」という概念が古くから存在しています。
 CDで指し示すことはできるのですが、カレント(今いる)という部分で一癖あります。
 「カレントドライブ」という概念があり、パスの中に含まれているようで含まれていないような少しわかりにくい部分でもあります。
 自分がC:ドライブのどこかにいたとして、「CD D:\Temp」と打って実行してもカレント表示は変わらないですし、「cd」空打ちしてもC:\~~~の元の場所のままです。
 これは、「CD」コマンドでは基本フォルダの移動酒でありドライブの移動はオプション「 /d」を付けてあげないとドライブの移動までは認識しない仕様になっているためです。
 ただし、D:のドライブ側では実際には移動されているため、各ドライブ毎にカレントフォルダが記憶されている動きになっています。
 そして、カレントドライブを移動する方法は、「d:」と打つだけで移動します。C:ドライブに戻りたいときは「c:」と打ちます。
 言葉・文字ではなかなか表現しにくい/わかりにくいと思いますので、実際に打ってみるとこうなります。
 どうですかね。。。
 コマンドプロンプトとしては、各ドライブごとにカレントのディレクトリ(フォルダ)位置情報を保持しているという考え方がしっくりくるかと思います。

 本題ですが、ドライブごと、“いっぺんに移動“するには、
  cd /d D:\Temp
 と実行すると、コマンドプロンプトのカレントドライブはD:に移動しつつ、フォルダも移動します。

スペース文字を含むパスはダブルクォート(”~~~”)で括る


 さて、長くなりましたが、本当に「CD」の最後にします。
 エクスプローラーなどで“半角スペース文字”を使ったフォルダやファイル名を付けることが出来ますが、結構嫌われます。その理由は、このコマンドプロンプトなどで操作するとすぐわかります。
 たとえば、半角スペースの入ったフォルダに「cd」を実行しようとした場合、“そんなフォルダねぇーぞ!ゴラァ!ぼけぇっ!”という事をやさし~く言われてしまいます。

 ・・・
 と思ったら、
 「cd C:\Program Files」で移動できてしまったぁ!!
 ・・・衝撃です。
 今初めて知りました。移動できるんですね。。。
 いつからできるようになったのか、、、最近???昔から???知りませんでした。

 えっと、気を取り直して。
 本来は、ダブルクォートで括らないとだめです。はい。
 「cd "C:\Program Files"」が正しいです。
 ・・・
 いや、えっと、うんと、そうだ!!「dir」ならきっと。。。
 「dir C:\Program Files」
 はい、怒られた。
 “ファイルが見つかりません”と、やさし~く言ってくれました。(よかったぁ)

 こういった場合、正しくは、
 「dir "C:\Program Files"」
 とダブルクォーテーションでパス全体を括ってひと塊ですよ~と認識させてあげます。
 (そうしないと、オプションの区切り(引数)なのかわからないですからね。)
 で、括って実行すると、ずらずらっとDIRの結果として表示されます。

 嫌われる理由は、何かプログラムやパッチで処理させようとした時、「スペースを含んでいるかもしれない」と思うと、いちいちダブルクォートで括ってあげないといけないから、です。
 が、今のご時世、入っていることを当然と考えて作り手は必ずスペースを含む名前の処理をしていると思いますので、作り手と使い手の間では暗黙の了解ですね。


 という事で、思わぬ発見(あぶないあぶない、ちゃんと試しながら記事書いててよかった)もありましたが、「CD」とその他もろもろ関連事項でした。

- PDS PIS 研究所 室長 -

2019年7月9日火曜日

Windowsコマンドプロンプト使うなら、最低限これだけは覚えるべし②:DIR

< Windows MS-DOS コマンド プロンプト “DIR” >


 前回は「SET」の記事を書きましたが、今回は「DIR」について書きたいと思います。

 この「DIR」は、通常、今いるカレントディレクトリ(フォルダ)の状態を一覧で表示してくれますが、意外とオプションの使い方や他のコマンドとのかけ合わせで奥が深かったりします。

 まず、単純に「dir」コマンドを実行(コマンドプロンプトの立ち上げ方は前回の記事を参照してください。)
  dir
 以下画像の一つ目です。あえて何もないフォルダで実行してみた結果です。通常はいろいろなファイルやフォルダが表示されると思われます。
 この単純に3文字の入力でカレントディレクトリの情報表示はとても多用します。私は癖で打ってしまうことも多々。。。次回書こうと思っている「CD」と共によく使うので覚えておいた方がいいです。

 その下にある、
  dir C:\Windows\temp
 は、“絶対パス”形式で引数を与え、そのフォルダの情報を確認する場合の例です(上の図2番目)。
  dir C:\Windows\*.log
 “絶対パス”で指定しつつも、対象の名前をワイルドカード(アスタリスク「*」)であいまいにし、拡張子が「.log」の物だけを列挙(上の図3番目)。


 使い方を確認する際は、
  dir /?
 で詳細なオプションを確認できます(以下結果を引用)。
ディレクトリ中のファイルとサブディレクトリを一覧表示します。

DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]ソート順]] [/P] [/Q] [/R] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]

  [ドライブ:][パス][ファイル名]
              一覧表示するドライブ、ディレクトリ、またはファイルを指定します。

  /A          指定された属性のファイルを表示します。
  属性        D  ディレクトリ                R  読み取り専用
              H  隠しファイル                A  アーカイブ
              S  システム ファイル           I  非インデックス対象ファイル
               L  再解析ポイント             -  その属性以外
  /B          ファイル名のみを表示します (見出しや要約が付きません)。
  /C          ファイル サイズを桁区切り表示します。これは
              既定の設定です。/-C とすると桁区切り表示されません。
  /D          /W と同じですが、ファイルを列で並べ替えた一覧を表示します。
  /L          小文字で表示します。
  /N          ファイル名を右端に表示する一覧形式を使用します。
  /O          ファイルを並べ替えて表示します。
  ソート順    N  名前順 (アルファベット)     S  サイズ順 (小さい方から)
              E  拡張子順 (アルファベット)   D  日時順 (古い方から)
              G  グループ (ディレクトリから) -  降順
  /P          1 画面ごとに停止して表示します。
  /Q          ファイルの所有者を表示します。
  /R          ファイルの代替データ ストリームを表示します。
  /S          指定されたディレクトリおよびそのサブディレクトリのすべての
              ファイルを表示します。
  /T          どのタイム フィールドを表示するか、または並べ替えに使用するかを
              指定します。
  タイムフィールド
              C  作成
              A  最終アクセス
              W  最終更新
  /W          ワイド一覧形式で表示します。
  /X          このオプションは MS-DOS 形式以外のファイル名に対する短い名前を
              表示します。長い名前の前に短い名前を表示する点を除けば、
              /N オプションと同じです。短い名前がない場合は、ブランクに
              なります。
  /4          4 つの数字で年を表示します。

環境変数 DIRCMD にスイッチを設定できます。
/-W のように - (ハイフン) を前に付けると、そのスイッチは無効になります。

 よく使うのは、
  • /B ←単体で使うと“ファイル名”だけになり、/Sと一緒に使うとフルパスで再帰的に列挙していきます(★よく使います★)。
  • /S ←単体で使うと色々な見出しやサイズ、日付等と共にフォルダであれば再帰的にその中まで追いかけて表示します(かなり見にくい)。/Bと一緒に使うと(同上)。
 あたりになります。
 試しに、とあるフォルダ以下全てで、~.logファイルを探そうとした場合こういった形になります。


  dir /B /S C:\Windows\Microsoft.NET\*.log /?

 ちょっとしたファイルを探したいときにも使えますね。

 フルパスで列挙出来てしまえば、テキストファイルに保存するなり、Excelに張り付け(
(「\」を区切り文字にして各フォルダ階層を列に分けることも可能)るなり、エクスプローラでは表示や結果からの起動はできますが、エビデンス残しや文字列操作などしたい場合はテキスト化した方がいろいろと使えると思います。
 個人的には、ここに属性とサイズも簡単に出したいところですが、/Bを付けると元々の情報がカットされてしまうのでバッチ化するしかないですかね。
 その方法は、いつか書きたいと思います。

- PDS PIS 研究室 室長 -

Windowsコマンドプロンプト使うなら、最低限これだけは覚えるべし①:SET

< Windows MS-DOS コマンド プロンプト “SET” >


 このご時世、Windowsで“コマンドプロンプト”を使って何かしなければいけないというシーンはそんなに多くないのかもしれませんが。。。
 これらのMS-DOSコマンドだけは最低限覚えておきましょう!というものを取り上げていこうと思います。なお、MS-DOSコマンドにおいて大文字小文字は同一ですので気にしないでください。

  1. 「set」(せっと)←①今ここ
    現在の環境変数を表示等
  2. 「dir」(でぃーあいあーる)
    現在のディレクトリ(フォルダ)内の情報表示
  3. 「cd」(しーでぃー、ちぇんじでぃれくとり)
    ディレクトリ(フォルダ)のカレント(立ち位置)移動
  4. 「C:/D:」・・・
    現在のドライブのカレント(立ち位置)移動
  5. 他「copy」「del」「mkdir」「ipconfig」「cmd」「ping」・・・等は追々として



 “ちょっとした事”で何かを確認する時には(私の場合)コマンドプロンプト使ってしまいます。
 なぜか?と問われると答えるのは難しいですが、慣れ意外にも、“ユーザーインターフェースが変わりすぎっ!”というのはあるかもしれません。

  • コントロールパネルの表示(とそこまでの経路)
  • 設定系アイコン、何がどこにあるのか、あれとそれは同じ?違う?
  • そもそものスタートメニューの構造がわかりにくく、深い
  • ログインユーザーごとにカスタムしてたり表示条件が違う

 ありとあらゆるパターンを習得しても、Updateで変わってしまったりする。ので、基本コマンドプロンプトでできることであればそっちで覚えた方が一石三鳥なんですよね。

 例えば、“今の自分のコンピュータ名”と“ログインユーザー名”を知りたい・相手に伝えたいという時、“GUIでとっさに確認”って皆さんどうやりますか?ちゃちゃっとできる人ってどれくらいいるものなんでしょうか?
 (ちなみに私は一瞬戸惑いました。あれ?えーっと、ん?。。。GUIという条件を付けられると、どのルートで行くのが一番早いのか考えてしまいます。)

 >>>コマンドプロンプトを立ち上げるには<<<

  •  左下スタートメニューの「Windows アクセサリ」じゃなくて(Windows7だとアクセサリの中なんですよね・・・)、「Windows 管理ツール」でもなく、「Windows システム ツール」にありまして。
    ※右クリックしてスタートにピン止めしておくことをお勧めします。

 ほかの立ち上げ方法は、

  • 「Windowsキー」+「x」を押し、コマンドプロンプトを選択(正し、powershellからコマンドプロンプトにタスクバー内の設定を変えているユーザーに限る)。
  • 「Windowsキー」+「r」を押し、実行するプログラムとして“cmd”を入力し実行する(ただし、厳密にはコマンドプロンプト画面ではなくcmd.exe直実行になる)。

 ※↑こういう変化やバリエーション、設定による、等がマニュアル作り・版管理のロスになったりしますね。

 コマンドプロンプトを立ち上げられれば、「SET」コマンドだけでわかります。
  set
 これだけで実行すると現在のすべての環境変数が表示されます。
 ・
 ・
 ・
(↑見えても問題の無いところだけに端折ってます。)
 ・

 その中から
  COMPUTERNAME=TestPC01
 という行の右側がコンピュータ名(尚、会話の中ではマシン名やノード名と呼ぶことも)で、
  USERNAME=TestUser01
 の右側が現在ログインしているユーザー名(別名サインイン名等)です。
 もし、ドメイン(別名ActiveDirectory)管理下にあるユーザーの場合はそのドメイン名も重要になるので
  USERDOMAIN=TeatAD01
 の右側もユーザー名の一部(上位)となりえます(上の例ですと「TeatAD01\TestUser01」となります)。
 表示が多すぎて。。。というばあいは、「set comp」や「set user」と頭の文字を入れることでそれに合ったものだけが表示できます。

 ほかにも環境変数で大切な記述の設定値もありますし、その端末、そのユーザーでの動作環境という意味ではトラブル調査でも意外と使うことが多いコマンドです。
 例:ユーザーAでトラブルが起きていて、Administratorユーザーで調べたけど問題がなく、よくよくユーザーAで調べたところ、ユーザーAのユーザー環境変数に余計なものが入っていた/間違っていた、等。

 また、そのコマンドプロンプト中における環境変数の設定(代入)や、演算、プロンプトの文字入力受付(待ち)、値の置換、切り出しなどにも使ったりしますが、これは主にバッチを組んで実行する時くらいでしょうか。
 詳しく知りたい場合は、他のコマンドも共通ですが、
  SET /?
 を実行するとそのコマンド単体のヘルプが表示されますので確認してください。

ー PDS PIS 研究室 室長 -

2019年7月2日火曜日

Windowsコマンド:「ROBOCOPY」での簡易バックアップ

 大切なデータを守るためにもバックアップは重要ですが、今のWindowsにはROBOCOPYコマンドがあるので便利ですね。
 使い方は簡単。コマンドプロンプトを立ち上げてコマンドを実行するだけ。

 ROBOCOPY コピー元データフォルダ コピー先データフォルダ /MIR
 ※使い方を誤って逆にするとコピー元を壊しかねないので注意してください。
 (/MIRはミラーモード(複製のため、元で削除されたデータは先でも削除)です。細かい使い方は、ヘルプオプション付き「ROBOCOPY /?」で確認できます。)

 ただし、過去一回一個だけのバックアップを取っていても「もう一個前の変更する前のファイルが欲しい・・・」とか、「数日前に消しちゃったからバックアップも消えてる・・・」なんてこともありますよね。
 そんな時は、曜日や日にちの文字をフォルダにつけてバックアップを取っておく方法が手っ取り早いです(もちろんその分のハードディスク容量は必要ですが)。

 DOS(コマンドプロンプト)では、変数の文字列置換を無理やり使って、コマンド実行時の%DATE%変数の一部を抜き出して出力フォルダ名にあてがうことで、約一か月後まで上書きされることなく容易に取っておくことが出来ます。

 変数の抜き出し例:%DATE:~8,2%
 コマンドプロンプトで「ECHO %DATE%」と打つと、日本語環境では「2019/07/02」と表示されます。
 この文字列の、“0個目から数えて8文字目”から“2文字”だけを取り出すことで「02」だけが取得できます。
 これを使い、コピー先フォルダの末尾に付け足すことで“毎月のその日のみ”のフォルダを作りバックアップすることになります。

 ROBOCOPY コピー元データフォルダ コピー先データフォルダ%DATE:~8,2% /MIR

 ついでにログファイルも取っておきたい場合は、オプションの追加をします。ログファイルも日付毎に分けて取っておくことを想定し、%DATE%を分解してつけておきます。

 ROBOCOPY コピー元データフォルダ コピー先データフォルダ\%DATE:~8,2% /MIR /LOG+:ログ出力先\%DATE:~8,2%.log


 実際の使用例で書き直すと以下のようになります。

  • クライアント上で実行し、サーバーにある共有フォルダを自端末にバックアップ
  • バックアップ元はXドライブにネットワーク接続されていて、以下すべてを対象
  • バックアップ先は自DドライブのBKフォルダ下にし、日付フォルダを作り以下にバックアップする
  • ROBOCOPYはミラーモードで動作させる
  • ログファイルはDドライブのBKフォルダ下に日付.logで追記保存

 実行例:
 ROBOCOPY X:\ D:\BK\%DATE:~8,2% /MIR /LOG+:D:\BK\%DATE:~8,2%.log

 結果例:
 


 ※データのフォルダは自動的に作成されますが、ログファイルのフォルダは作られないため、すでに実在しているフォルダパスである必要があります。
 ※毎日タスクスケジューラで自動実行させたいところですが、直接指定しても途中の:で切れてしまうようなので、バッチファイル化して設定する必要があります。


- PDS PIS 研究室 室長 -