msysシェルから内部cmdコマンドを実行する方法は?


19

Windows CMDユーティリティには、などの多数の内部コマンドがありますmklinkmsysシェルからどのように使用できますか?

以下からCMDのマニュアル/cスイッチはコマンド及び出口を実行するために使用することができます。しかし、これはうまくいかないようです。

  • 私がやるとcmd /c mklinkmklinkコマンドは実行されず、CMDシェルは終了しません。

Enterを押す前に:

ここに画像の説明を入力してください

後:

ここに画像の説明を入力してください

プロセスモニターのスクリーンショット:

ここに画像の説明を入力してください

  • バックグラウンドプロセスとしてコマンドを実行しようとしています。cmd /c mklink &明らかに動作しています- mklinkコマンドは実行されますが、CMDシェルは終了していません。Enter押すたびCMDに、アクティブなシェルになります。

cmd /c mklinkCシェル、Cygwin bash、およびで動作しcmd.exeます。しかし、私は昇格しなければなりませんでした。さもなければ、「この操作を実行するのに十分な権限がありません」という苦情を受けました。msysインストールしていないので試したことはありませんが、問題だとは懐疑的です。他に何かが起こっているのではないかと疑っています。何をしたか、何が起こったのかを写したものやスクリーンショットが役立つかもしれません。
ニコールハミルトン

@NicoleHamilton、スクリーンショットが追加されました。以下のためにmklink仕事に、シェルは確かに管理者として実行する必要がありません。しかし、私の問題は、cmdシェルがバックグラウンドで引き継ぐか実行することなく、内部コマンドを実行できないことです。この問題は、管理者を必要としない、などの単純なコマンドにも存在しますdir
ミハイロタル

傍受している可能性のあるエイリアス、プロシージャ定義、またはスクリプトはありますcmdか?
ニコールハミルトン

@NicoleHamilton、いや; @Maxiumsのアドバイスを受けて、プロセスモニターを実行しましたが、添付のスクリーンショットでわかるように、問題はにmsys変換さ/cれることc:\ です。答えはそれをエスケープし、コマンドをとして実行することcmd //c mklinkです。
ミハイRotaru

回答:


14
  1. %PATH%でcmd.cmdまたはcmd.batを検索します。彼らはあなたのcmdを妨げる可能性が

  2. 実行プロセスモニタとあなたを実行しますcmd /c mklink。実際に実行されたコマンドのProcMonログを調べます。


26
プロセスモニターは、問題の追跡に役立ちました。にmsys変換さ/cれるのはc:\ ; エスケープする必要があります:cmd //c mklink。これらの変換が行われる方法は、ここで説明されています
ミハイロタル

1
@MihaiRotaruこのコメントは答えになるはずです
-laktak

2

win7 / cygwin / bashにも同じ問題があり、解決策はcmdを2回起動し、cmdの必要に応じてスラッシュをバックスラッシュに変換することです(たとえば)。 REPO_DIR=${REPO_DIR////\\} # Example, Turn c:/cvs into c:\cvs for cmd
cmd /C "cmd /C mklink /D .Repo $REPO_DIR" # launch cmd /C cmd /C cmd


1

プロセスモニターは、問題の追跡に役立ちました。にmsys変換さ/cれるのはc:\; エスケープする必要があります:cmd //c mklink。これらの変換が行われる方法は、ここで説明されています。–ミハイロタル13年1月1日21:32

Mihaiのコメントだけではこれを機能させることができませんでした。パスにはまだスラッシュ/が含まれていて、有効な切り替えmklink/msys64はないという不満がありました。

そこで、私はそれを機能させるバッチスクリプトを作成しました。

MSYSからバッチスクリプトを呼び出す方法は次のとおりです。

 $ mingw_ln.bat "$destination" "$targetpath"

そして、バッチスクリプトはこれらの2つのパスを使用し、文字列置換のパラメーター拡張構文を使用してに変換/します。1\:OLD=NEW

set LINK=%1
set TARGET=%2

REM Convert POSIX paths to Windows paths
set LINK=%LINK:/=\%
set TARGET=%TARGET:/=\%

mklink /D %LINK% %TARGET%

1これは、bashの${PARAM:/OLD/NEW}構文に似ていますが、それに精通している人にとっては

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