Windowsコマンドラインでエイリアスを設定する方法は?


66

私は以前bashを使っていて、エイリアスの恩恵をたくさん受けていました。Windowsコマンドラインに同等の方法はありますか?

Linux環境をシミュレートしたくないので、cygwinは選択できません。のような非常に長いコマンドのショートカットが必要cd a_very_long_pathです。


5
使用しますdoskey(古いMS DOS doskeyではない名前にだまされないでください)。doskey /?詳細については使用してください。それ以外は、この質問はここではトピック外です。
Christian.K

可能性のある重複したWindowsのコマンドプロンプトで、ディレクトリをデフォルトに現在の場所からのパスを変更するコマンドはありますか?具体的にはコマンドプロンプトを開いたときにDOSKeyマクロを自動的に読み込む方法を知るために、私の回答を参照してください。
カラン

永久DOSKEY作る方法+関連superuser.com/questions/49170/...
laggingreflex

回答:


61

Christian.Kがコメントで述べたように、DOSKEYコマンドを使用して、エイリアスに類似したマクロを定義できます。

doskey macroName=macroDefinition

マクロのパラメータは、経由での定義で参照されている$接頭辞位置:$1経由$9して$*すべてのために。

参照してくださいDOSKEYのTechNetドキュメント、またはタイプdoskey /?help doskey詳細については、コマンドラインからを。

ただし、DOSKEYマクロには重大な制限があります。

  • マクロは、対話型のコマンドラインでのみ機能します。バッチスクリプト内では機能しません。
  • 彼らは、パイプのいずれかの側に使用することはできません。両方someMacro|findstr '^'dir|someMacro失敗します。
  • FOR / Fコマンド内では使用できません:for /f %A in ('someMacro') do ...失敗します

制限は非常に厳しいため、DOSKEYマクロはほとんど使用しません。

もちろん、マクロの代わりにバッチスクリプトを作成し、スクリプトの場所がPATHにあることを確認できます。ただし、別のスクリプト内でスクリプトを使用する場合は、各スクリプトの前にCALLを付ける必要があります。

長くて頻繁に使用されるコマンドに対して単純な変数「マクロ」を作成できますが、使用するときに「マクロ」を展開する必要があるため、構文を入力するのは少し厄介です。

定義:

set "cdMe=cd a_very_long_path"

使用法(コマンドラインまたはスクリプトから)

%cdMe%

おかげで、バッチスクリプト内で作業する方法はありますか?
StarPinkER

@JermaineXu-DOSKEYマクロを使用する方法はありません。おおまかな選択肢については、更新された回答をご覧ください。
dbenham

2
2番目のソリューションの長所は、パイピングが機能することです。パイピングでマクロを使用する場合、doskeyを使用した最初のソリューションは機能しません。
AparticoのCEO、14

?このマクロをWin + Rボックス([実行]ダイアログ)に表示するにはどうすればよいですか
-ZEE

@ZEE-できません。DOSKEYマクロは、cmd.exeを実行しているコンソールウィンドウに物理的にキー入力する必要があります。
-dbenham

15

バッチスクリプトを作成して、パスに保存できます。

Linuxでは、スクリプトを作成し、それを~/binWindows上のフォルダーに追加して、同じ操作を行うことができます。

環境変数に追加%USERPROFILE%\binしますPATH。次に、そこにスクリプトを保存します。

quickcd.cmd

@echo off
cd /d a_very_long_path

これquickcdで、コマンドラインで入力できます。

call関数を使用してスクリプト内で呼び出すこともできます

call quickcd

これは機能しません-バッチファイル内のディレクトリの設定は、バッチファイルにのみ影響します。バッチファイルが終了すると、パスは元に戻ります。
シャドウ

1
それは私のために働いています。Microsoft Windows [Version 10.0.17134.648]
ウィリアムベットリッジラドフォード

それは本当に奇妙です。したがって、上記の例をコピーして貼り付ける(存在するディレクトリに変更する)場合、うまくいきますか?
シャドウ

フォルダーは別のドライブにありますか?/dフラグを追加する必要があるかもしれませんCD
William Bettridge-Radford

13

subst

あなたが本当にこのようなことを回避しようとしている場合:

C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

substコマンドを使用して、その長いパスを別のドライブ文字にマッピングできます

subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

次に、そのフォルダーにジャンプする場合はm:、コマンドラインで入力するだけです。

これの利点はdoskey、すべてのバッチプログラムで機能し、Windows内のファイルダイアログボックスに表示されることです。

マッピングが不要になった場合:

subst m: /D

3
私もこれが好きですが、ドライブ文字を食べてしまいます。
ggb667 14

8

Windowsが使用する同じトリックを使用できます:環境変数(またはバッチコンテキストの変数)を設定します。たとえば、環境変数%windir%(および他のいくつか)があります。

cd C:\Windows\

または

cd %windir%

同じことをします。だから、あなたがしなければならないことは次のとおりです:

set "mydir=C:\very\long\path\to\my\data\"

その後、あなたは(あなたがどこからでも)することができます:

dir %mydir%

または

cd %mydir%

またはあなたが望むもの。


1
それがチケット@stephanです!
jbchurchill 14

3

Linuxとは異なり、Windowsではエイリアスに引数を使用でき、定義にそれらの引数を割り当てるパラメーターを指定できます。

内部の組み込みコマンドはdoskeyです。これは、外部の実行可能ファイルでは%SystemRoot%\System32なく、cmd.exeそれ自体がデフォルトでフォルダーを指す%SystemRoot%か、または%Windir%両方を指す機能であることを意味C:\Windowsします。

Doskeyは、他の多くのものの中でもエイリアスを定義しています。Windowsの用語では、エイリアスはマクロと呼ばれます。使用するエイリアスを設定するには

doskey alias=command $1 $2 ... $9 or $* (to catch them all) 

ここで$1は、最初の引数を$*指し、すべての引数を指します。

特殊文字として、つまりセパレータとして(コマンド用に)扱われるスペースを省略する引数が1つしかない場合は$*、常に二重引用符を使用$1します。

さらに、別名マクロを別のファイルに定義して、たとえばLinuxAliases.macro

doskey /macrofile=LinuxAliases.macro

現在のセッションでのみファイル内に定義されているすべてのエイリアスをロードします。つまり、exitアウトオブcmd.exeプロセス(シェルおよびコマンドプロンプトとも呼ばれます)の場合、それらは削除されます。

永続的なエイリアスを作成するには、AutoRunまたはAutoCommandのいずれかと呼ばれるregeditキーのどこかに完全なコマンドを入力します。マクロファイルの内部構文と一緒に今思い出すことはできません:P


以下は、コマンドの公式ドキュメントおよびさらに優れたドキュメントです。


1

特にディレクトリを変更するための「エイリアス」を作成しました。基本的に、という名前のファイルを作成し、fav.batPATH内のフォルダー(C:\ MyBatchesなど)に配置します。

@setlocal
@echo off
set userChoice=%1
rem The format is:
rem call :condition SHORTCUT FOLDER
call :condition web c:\Git\SecThor\SecWeb\App\
call :condition cloud c:\Git\SecThor\SecCloud\dojo.backend\
call :condition good c:\Users\Vitaly\Dropbox\Projects\goodread-friends\
endlocal
popd
GOTO :eof

:condition
rem We do PUSHD twice since endlocal does popd once :|
if "%userChoice%"=="%1" pushd %2 & pushd %2 & echo pushd %2
if "%userChoice%"=="" echo %1 =^> %2
GOTO :eof

その後、事前定義されたフォルダにすばやくジャンプできます。ここでそのテクニックに関する完全な記事を書きました。


0

あなたが同じドライブに残っていると仮定します。つまりD:cd D:\somedir\不要です。

私の場合、C:はシステムファイルを保持しますが、すべての作業はDで行われます。

2つの部分。最初に、バッチファイルを使用していくつかの作業ディレクトリを設定します。

localprofile.cmdとしましょう。これらの複数のものを持つことができ、必要に応じて実行するだけです。

set wd1=D:\home\work\fb440.dumper
set wd2=D:\home\work\py\tests

設定した環境変数に基づいて、別のコマンドファイルを使用して移動します。

wd.cmd

echo off
d:
if %1.==. set | findstr wd
if %1==1 cd %wd1%
if %1==2 cd %wd2%
if %1==3 cd %wd3%
if %1==4 cd %wd4%
if %1==5 cd %wd5%
if %1==6 cd %wd6%

そして、少しのサンプル使用:

D:\home\bin>wd 2

D:\home\bin>echo off
D:\home\work\py\tests>wd 1

D:\home\work\py\tests>echo off

wd自体は、ブックマークされたディレクトリのリストを表示することになっています。動作しますが、なぜこの「予期しないcd」メッセージが表示されるのかわかりません。

D:\home\work\fb440.dumper>wd

D:\home\work\fb440.dumper>echo off
wd1=D:\home\work\fb440.dumper
wd2=D:\home\work\py\tests
cd was unexpected at this time.

D:\home\work\fb440.dumper> 

通常の.cmdバッチ

ディレクトリナビゲーションとは別に、fooのcmd.cmdを PATHのどこかに作成し、エイリアスとして機能させることができます。Linux / OSXシェルとは異なり、cmdファイルは環境変数とセッションに影響を与える可能性があり、それらをソースする必要はありません。

たとえば、次のようにナビゲートするcdbin.cmdがあります。

d:
cd \home\bin

そして、これは擬似grep grep.cmdです

findstr -n %1 %2

動作中(ソート/ + 2 / + 10の意味は何でも)

D:\home\work\fb440.dumper>grep class *.py | sort /+2 /+10

dumper2.py:18:class PrettySafeLoader(yaml.SafeLoader):            
dumper2.py:27:class Comparator(object):                           
dumper2.py:3:class module_settings:                               
linker2.py:5:class module_settings:                               
dumper2.py:65:class DataCompProcessor(object):                    
dumper2.py:69:class DataCompTextRenderer(DataCompProcessor):      
dumper2.py:76:class DataComparator(object):                       

0

doskey.exeを使用できます。以下に例を示します。

doskey qcd=cd [pathname]

そして今入力qcdすると、そのパスにcdします。

doskeyマクロのヘルプを次に示します。

doskey [macroname]=[command]

これが最も単純な形式です。以下に例を示します。

doskey word=echo This is a really, really long sentence.

そしてword、出力を入力すると:

これは本当に長い文です。

パラメーターに$ 1〜$ 9を使用できます。以下に例を示します。

doskey npd=notepad $1

入力npdするとメモ帳が開きますが、入力npd test.txtするとtest.txtメモ帳で開きます。

すべてのパラメータに$ *を使用できます。別の例を次に示します。

doskey prt=echo $*

あなたが入力した場合とprt This is short.、出力は次のようになります。

これは短いです。

複数のコマンドに$ Tを使用できます。以下に例を示します。

doskey newline=echo $1 $T echo $2

あなたが入力した場合とnewline Hello and、出力は次のようになります。

こんにちは

そして

ご了承ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.