Location via proxy:   
[Report a bug]   [Manage cookies]                

Windows11でbatファイルをスタートにピン留めする

課題:

通常のアプリケーション(exeファイル)は右クリックメニューに「スタートにピン留めする」があるので、これでピン留めできるのだが、batファイルの右クリックメニューには「スタートにピン留めする」が無いため、ピン留めすることができない。

続きを読む

Windows10 .ps1ファイルをダブルクリックした時にメモ帳ではないエディタで開きたい

※Windows11は、この記事の方法では出来ません。普通に関連付けを変更すればOKです。但し、アイコンも変わってしまいます。

(右クリックして「PowerShell で実行」は残したい。)

私はTeraPadの使い手なので、PowerShellスクリプト(*.ps1)がTeraPadで開くようにします。同じ方法で他のプログラムで開くことも可能なはずです。

検索ボックスまたは win+r のファイル名を指定して実行に「regedit」と入力してレジストリエディターを開きます。

レジストリを編集するので、PCの動作がおかしくなるかもしれません。念の為にバックアップを取っておきましょう。(ファイル > エクスポート > 適当なファイル名で保存)

コンピューター¥HKEY_CLASSES_ROOT¥Microsoft.PowerShellScript.1¥Shell¥Open¥Command
(規定) を右クリックして「修正」を押します。

値のデータを
"C:\Windows\System32\notepad.exe" "%1"
から
"C:¥Program Files (x86TeraPad¥TeraPad.exe" "%1"
に変更します。
ファイルパスは適宜かえてください。
"%1"が無いと新規ファイルを開いてしまうので、忘れずに付けてください。

これでOKを押すと、変更が即時反映されます。
*.ps1をダブルクリック(開く)して、指定したエディタでファイルが開けば成功です。

Windows PowerShellを使うならCopilotが便利

心なしかMicrosoft製だからPowerShellについてちゃんと答えてくれる気がします。
もちろん、他の言語の話もちゃんとしているとは思いますが。

ちょっと変わったことをお願いすると変になるのは、生成AIらしさかなと感じます。みんながやっている常識的なことには強いんですけど。

Windows コマンドプロンプトの出力を検索する

コマンド | findstr "hoge"

これでLinuxでの コマンド | grep "hoge" 相当のことができる。
コマンドプロンプトでもパイプが使えると気付いたのだった。

一旦テキストに出力してから検索してもよい。

コマンド > fuga.txt

既にコマンドプロンプト上に出力されたテキストを検索するには、Ctrl+fが使える。

PowerToysでNumLockにBackSpace機能をキーマップした状態でリモートデスクトップでNumLockキーを押すと何故か16文字消えてしまう

表題の問題にしばらく悩まされまして、結論から書きますと、リモートデスクトップ接続する際に
オプションの表示 > ローカルリソース > キーボード
のプルダウンメニューから「このコンピューター」を選択することで解消しました。
(「全画面表示の使用時のみ」だと、リモートPCが全画面表示でもウィンドウ状態でも問題が起きていました。)

続きを読む

Windows10でTelnetサーバを立てる(WSLを使う)

結論から書くと、Windows10自体でTelnetサーバは立てられないのでWSLでTelnetを使います。
Windows11でも有効な手順だと思います。

WSLを有効化する

コントロールパネル>プログラム>Windowsの機能の有効化または無効化
LinuxWindowsサブシステム
にチェックを入れてOKを押し、再起動を求められたら再起動します。

Windows10 WSL有効化

WSLをインストールする

WSL (Windows Subsystem for Linux) をインストールします。
(WSLはWindowsで動くLinuxです。)
Microsoft Storeで入手可能です。
あるいは、PowerShellで wsl --install します。
ディストリビューションはどれでも大丈夫だと思います(一部手順は異なってきます)が、私はUbuntuを入れました。
再起動を求められたら再起動します。

WSLを起動する

初回はユーザ名とパスワードを設定します。

WSLでtelnetをインストールする

先にaptをアップデートしてから、telnetをインストールします。
sudoで実行するコマンドではパスワードが聞かれるので、パスワードを入力してください。

sudo apt update
sudo apt install telnetd
sudo apt install inetutils-inetd

WSLでtelnetを起動する

sudo /etc/init.d/inetutils-inetd start

このとき、ファイアウォールが接続を許可するか聞いてきたら許可してください。

# 私は何故か初回で聞いてこず、再起動して再実行したら聞かれました。

# Windows10のファイアウォールの設定の仕組みをよく知らない、詳しい方がいらしたら教えて下さい。

WSL1の場合はこれでtelnetサーバのセットアップ完了です。
WindowsIPアドレスtelnetでアクセスしてください。

telnetを終了するには下記のコマンドを用います。

sudo /etc/init.d/inetutils-inetd stop

(WSL2の場合)PowerShellでポートフォワーディングする

WSLには、WSL1とWSL2があり、ネットワークの仕組みが異なります。
WSL1のtelnetサーバにはWindowsと同じIPアドレス(の23番ポート)でアクセスすることができます。

WSL2にはホストのWindowsと異なるプライベートアドレスが割り振られるので、他のマシンから直接アクセスすることができません。(2022年2月時点のWindows10の場合。現在この仕様は変更が検討されているようです。)
このため、WSL2の場合はポートフォワーディング(ポート転送)が必要になります。

WSLのバージョンを確認するには、PowerShellで wsl --list --verbose と入力します。

wsl --list --verbose
  NAME      STATE           VERSION
* Ubuntu    Running         2

VERSIONが2であれば、管理者権限のPowerShellで下記ポートフォワーディングの設定も行います。

netsh interface portproxy add v4tov4 listenport=23 connectaddress=localhost

WSL2の初期バージョンでは、localhostだと上手くいかないかもしれません。
その場合、WSL2のバージョンを上げるか、
WSL2のIPアドレスをifconfigなどで確認し、そのアドレスをconnectaddressに指定してください。
※WSL2のIPアドレスは起動のたびに変化します。

ポートフォワーディングの状況を確認するには下記コマンドを用います。

netsh interface portproxy show all

WSL2の場合はこれでtelnetサーバのセットアップ完了です。
WindowsIPアドレスtelnetでアクセスしてください。

ポートフォワーディングを終了するには下記コマンドを用います。

netsh interface portproxy delete v4tov4 listenport=23

あとがき

Windows10やWindows11では、Telnetサーバは使えなくなりました。比較的脆弱なためです。
Telnetクライアントは設定すれば使えます。)
代わりにSSHを使ってねというところですが、わけあってTelnetサーバが必要なこともあります。
しかし、ぐぐってもTelnetクライアントの方を使う記事ばかり上位に出てきたので自分用のメモを兼ねて書きました。

tcshでの文字列比較(パターンマッチング)

#!/bin/tcsh -x

# 単純比較(完全一致・不一致) == !=
if (str == str) then
    echo "True" # ←これ
else
    echo "False"
endif

if (str != str) then
    echo "True"
else
    echo "False" # ←これ
endif
#!/bin/tcsh -x

# パターンマッチング =~ !~
# ワイルドカードを使用できる
if (str =~ s*) then
    echo "True" # ←これ
else
    echo "False"
endif

if (str =~ s?r) then
    echo "True" # ←これ
else
    echo "False"
endif

if (str =~ {str,ing}) then
    echo "True" # ←これ
else
    echo "False"
endif

if (str =~ st[abp-t]) then
    echo "True" # ←これ
else
    echo "False"
endif

ワイルドカード正規表現とは異なります。
* 任意の0文字以上の文字
? 任意の1文字
[ ] いずれかの1文字。ハイフンで範囲指定
{ , } コンマで区切られた文字列のいずれか
上記を組み合わせて使用することもできる。

パターンマッチで使用できるワイルドカードは下記記事を参考にさせていただきました。
Linuxワイルドカード正規表現】の違いと変換,展開の動作 ~ ls, grep, findでの具体例の解説~
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/wildcard-regular-expression/

シェルの種類によってif文や条件式の書き方が異なります。
tcshシェルスクリプトを書こうと思ってググってもシェルの種類が混同されて出てくるので困ることがあり、自分用のメモとして書きました。