コマンドプロンプトを開いたときにコマンドを自動的に実行する


21

Windowsでコマンドプロンプトを開いたときに、特にいくつかのコマンドエイリアスを設定するために、いくつかのコンソールコマンドを自動的に実行する方法を探しています。

たとえば、コマンドプロンプトを開いたときに、次のようなコマンドを自動的に実行して、のls代わりに使用できるようにしdirます。

doskey ls=dir

これをどのように行うことができますか?



3
Windows XPにはDOSがありません。
user1686

@ KContreau、interessant。だから、私のバッチが「start / separate」コマンドの後にdoskey置換を保存せず、「cmd / k」または「cmd / c」でのみ保存するのが理由です
...-kokbira

「明確化」版の後に質問のタイトルを変更する必要がありますか?
-kokbira

1
@KCotreau:技術的には、Win32コンソールサブシステムの一部であり、に固有ではありませんcmd.exe
user1686

回答:


9

ログインしたときではなく、起動時にロードする場合、XP Proを使用している場合(XPホームにはgpedit.mscは含まれません)、次のようにします。

スタート>実行> gpedit.msc

Enterキーを押します。次に、コマンドラインからgpupdate / forceを実行します。

に行く

[コンピューターの構成]> [Windowsの設定]> [スクリプト]> [起動]

スクリプトに場所を追加します。

以下のユーザーログオンに対してもこれを行うことができます

[ユーザーの構成]> [Windowsの設定]> [スクリプト]> [起動]

XP Homeがある場合、スクリプトを次のいずれかにコピーできます。

C:\ Windows \ System32 \ GroupPolicy \ Machine \ Scripts \ Startup

起動時にそれらをロードするため、または:

C:\ Windows \ System32 \ GroupPolicy \ User \ Scripts \ Logon

ログオン時にユーザーにロードするため。GroupPolicyフォルダーは非表示です。


1
スタートアップフォルダに置くよりもこの方法の方がいいです。より永続的にします。
ジョーテイラー

1
@ジョーテイラーありがとう。正直に言うと、私はOutlookの起動などにのみStartupフォルダを使用します。これは、システム管理の観点から、より標準的な方法です。
KCotreau

@KContreau、あなたのソリューションは非常に便利ですが、その場合はそうではありません。テストしましたが、doskey substitutionコマンドに対しては機能しません
...-kokbira

@kokbira元の質問は単に「XPの起動時にスクリプトを実行する方法」でしたが、正確に答えたと思います。彼は編集し、「たとえば、そしてdoskey ls = dir」の部分を後に追加しました。
KCotreau

1
@KContreau、あなたは正しい、彼の問題はこの質問のタイトルが正しくないことです。「明確化」の中で、彼は「主にいくつかのエイリアスを設定するために、DOSプロンプトを起動するときにいくつかのDOSコマンドを実行したい」と言った。Windowsの起動時にいくつかのコマンドを実行することは問題ありませんが、エイリアスを実行することはできません。
コクビラ

47

コマンドエイリアスは、構成するコンソールウィンドウに固有であるため、起動スクリプトは機能しません。次の方法で実行できます。

  1. doskeyコマンドでバッチファイル(.cmd)を作成し、アプリケーションデータのどこかに配置します。

  2. cmdを開くたびに自動的に起動するように設定します。設定はレジストリにあります:

    • キー: HKCU\SOFTWARE\Microsoft\Command Processor
    • 値: AutoRun
    • タイプ:REG_EXPAND_SZ
    • データ: "%AppData%\aliases.cmd"

1
これは、コマンドプロンプトが常にコンパイラパスをロードするようにしたいWin2K仮想OSの優れたソリューションでした。唯一の違いは、代わりにREG_EXPAND_SZのREG_SZの使用だった
ジェームズ

これは素晴らしい解決策です。偶然、初期出力を抑制する方法はありますか?
nburr

1
@Nickolas:いつものようにコマンドをNULにリダイレクトするだけですか?
user1686

これは美しく機能しますが、Windowsリソースコンパイラ(rc.exe)に干渉し、「システムは指定されたパスを見つけることができません」などのエラーを引き起こす可能性があります。Visual Studio Shell Isolatedプロジェクトがコンパイルされないを参照してください。
User5910

私は、最初のファイルの存在チェックを設定することで、これを固定:if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
User5910

4

さまざまなコマンドインタープリターは、さまざまな方法でコマンドエイリアスを処理します。

MicrosoftのCMDは、Win32コンソールサブシステムに依存して、コマンドエイリアスメカニズムを提供しています。doskeyこのコマンドは、実際のプロセスのコンソールと相互作用し、そしてそれは別名を保持しているコンソールそのものです。したがって、エイリアスはコンソールごとで一時的です。

JP SoftwareのTCC / LEは、エイリアス自体を処理します。このaliasコマンドにより、「ローカル」または「グローバル」のエイリアスを表示および操作できます。エイリアスはまだ一時的ですが、1つのコマンドインタープリタープロセス専用であるか、すべてのコマンドインタープリタープロセス間で共有されます(すべてのコンソール間)。

以下のようなシェルKornシェルSFUAユーティリティツールキットで実行するツール- UNIXベースアプリケーション用サブシステムのWindows 7 Ultimateの各エディションおよびWindows Server 2008 R2でのボックスに右が来る(Windows XPの場合、1が可能ダウンロードしてインストールServices for UNIX version 3.5。)—およびcygwinの Bourne Againシェルも同様にエイリアス自体を処理します。エイリアスは一時的なものであり、コマンドインタープリタープロセスごとです。

エイリアスのデフォルトの初期セットの自動ロードも、コマンドインタープリターによって異なります。

いずれの場合でも、何らかのスクリプトにエイリアスを設定するコマンドを配置します。

grawityMicrosoftのCMDが起動時にコマンドを実行する2つのレジストリキーのいずれかを既に指定しています。残念ながら、エイリアス自体はコンソールごとに保存されますが、これはコマンドインタープリタープロセスごとです。最初のコマンドインタープリターからセカンダリコマンドインタープリターを起動すると、デフォルトのエイリアスに対する手動の変更がリセットされます。少なくともコンソールごとに1回だけ初期化を実行する別の方法は、コマンドインタープリターを起動するショートカットのコマンドテール/Kを呼び出すコマンドスクリプトのオプションと名前を追加することdoskeyです。

JP SoftwareのTCC / LE は、TCSTART起動時にスクリプト自動的に実行します。繰り返しますが、これはコマンドインタープリターごとのプロセスです。ただし、TCCの「ローカル」エイリアスはコマンドインタープリタープロセスごとでもあるため、ローカルエイリアスを使用している場合、これはエイリアスを初期化する適切な場所です。グローバルエイリアスの場合は、Startupフォルダーにショートカットを作成して、ファイルからエイリアスを読み込み(を使用alias /rshraliasコマンドを実行してショートカットの実行が終了した後もそれらが保持されるようにします。

Bourne AgainシェルとKornシェルの場合、他のプラットフォームでこれらのシェルを使用する場合と同じように実行します。Bourne Againシェルのおよびスクリプトでaliasコマンドを使用します。Kornシェルの、ENV、およびスクリプトでコマンドを使用します。$HOME/.profile$HOME/.bashrcalias$HOME/.profile$HOME/.kshrc


2

Gravityの答えは私にとってはとてもうまくいきました。

Documentsフォルダーにshell-aliases.cmdスクリプトを作成しました(後で見つけることができます)。

次に、レジストリキーに「AutoRun」エキスパンド文字列値を作成しました。

「HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor」

値をエイリアスファイルへのフルパスに設定します(私の場合は 'C:\ Users \ Lee \ Documents \ shell-aliases.cmd'にありました)。

コマンドプロンプトをリロードすると、doskeyエイリアスが機能しました。さらに、エイリアスファイルには簡単にアクセスでき、追加する必要があると思うので編集する準備ができています。


0

いくつかの場所がありますが、スタートメニュー>スタートアップフォルダがおそらく最も簡単です。

「msconfig」を実行して、起動するプログラムとその理由を確認します。これらのリストのいずれかにプログラムを追加するだけです(たとえば、レジ​​ストリ内)。


0

ここでの問題は、起動時に実行すると、これらの置換は開いたCMDプロンプトでのみ利用可能になることです。閉じた場合、これらの置換はすべて失われ、開かれたすべてのコマンドプロンプトに対して再度実行する必要があります。

したがって、いくつかの代替方法(それらを組み合わせることができます):

I.バッチとショートカットを作成します。

  1. これらのマクロを使用してバッチを作成し、既知の場所(c:\ apps \ mycmd.batなど)に保存します。
  2. デスクトップ(または目的の場所)にショートカットを作成し、そのパスの前に「cmd / k」を置きます(「cmd /kc:\apps\mycmd.bat」など)。
  3. そのため、そのショートカットを開くたびにすべてのコマンドが実行されます。

II。PATH環境変数にバッチとエントリを作成します。

  1. これらのマクロを使用してバッチを作成し、既知の場所(c:\ apps \ mycmd.batなど)に保存します。
  2. [コントロールパネル]> [システム]> [詳細設定]> [詳細]> [環境変数]に移動します。
  3. ユーザーまたはシステムエントリで、PATHという名前の変数を検索します。ダブルクリックして、最後に「;」を挿入します BATへのパス(例: "c:\ apps \" => "previous_string; c:\ apps \")、次にOkとOk。
  4. したがって、cmd(またはBATファイル)を使用する場合は、作成したパス(例: "c:\ apps")にBATの名前を入力してコマンドを実行します(たとえば、「myapps」と入力してこれらの置換コマンドを実行します)。

1
"start / separate"を試しましたが、環境変数のみを保存します(doskeyコマンドの置換ではありません)... "set"コマンドは開かれたプロンプトに対しても有効ですが、 "setx"を使用してシステムに保存できますまたはユーザー環境変数を「永久に」。doskeyの置換をシステムに「永久に」保存する方法があるのか​​、それともWindowsのスタートアップごとに保存するのかがわかりません。私は自分のやり方を使うことを好みます
...-kokbira
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.