Windows CMDコンソールで2つのコマンドを実行したいです。
Linuxでは、このようにします
touch thisfile ; ls -lstrh
それはどのようにWindows上で行われますか?
2000年以降のすべてのMicrosoft OSでこのようになっていますが、それでも今日でも問題はありません。
dir & echo foo
最初のコマンドが正常に終了した場合にのみ2番目のコマンドを実行したい場合は、次のようにします。
dir && echo foo
1行に複数のコマンドを実行する単一アンパサンド(&)構文は、Windows XP、Windows 2000、およびそれ以前のいくつかのNTバージョンに戻ります。 (少なくとも4.0、ここにいる1人のコメンターによると。)
このページを下にスクロールすると、他にもかなり多くの点がわかります。
それが教育的であると感じるかもしれない人のための過去のデータが続きます。
それ以前は、&&構文は、シェルの代わりとなる4DOSの機能の1つに過ぎず、その機能はMicrosoftのコマンドインタプリタに追加されていました。
Windows 95、98、およびMEでは、代わりにパイプ文字を使用します。
dir | echo foo
MS-DOS 5.0以降では、以前のWindowsおよびNTバージョンのコマンドインタプリタでは、(文書化されていない)コマンドセパレータは文字20(Ctrl + T)でした。
dir ^T echo foo
ドキュメントからの引用:
複数のコマンドと条件処理記号の使用
条件付き処理記号を使用して、単一のコマンドラインまたはスクリプトから複数のコマンドを実行できます。条件付き処理記号を使用して複数のコマンドを実行すると、条件付き処理記号の右側のコマンドは、条件付き処理記号の左側のコマンドの結果に基づいて機能します。
たとえば、前のコマンドが失敗した場合にのみコマンドを実行することができます。または、前のコマンドが成功した場合にのみコマンドを実行することをお勧めします。
次の表にリストされている特殊文字を使用して、複数のコマンドを渡すことができます。
& [...]
command1 & command2
1つのコマンドラインで複数のコマンドを区切るために使用します。 Cmd.exeは最初のコマンドを実行し、次に2番目のコマンドを実行します。
&& [...]
command1 && command2
シンボルの前のコマンドが成功した場合にのみ、&&の後にコマンドを実行するために使用します。 Cmd.exeは最初のコマンドを実行し、最初のコマンドが正常に完了した場合にのみ2番目のコマンドを実行します。
|| [...]
command1 || command2
||の後にコマンドを実行するために使用します。 ||の前にコマンドがある場合のみ失敗します。 Cmd.exeは最初のコマンドを実行し、最初のコマンドが正常に完了しなかった(0より大きいエラーコードを受け取った)場合にのみ2番目のコマンドを実行します。
( ) [...]
(command1 & command2)
複数のコマンドをグループ化またはネストするために使用します。
; or ,
command1 parameter1;parameter2
コマンドパラメータを区切るために使用します。
&
は;
(実行コマンド)と同等のBashで、&&
は&&
と同等のBashです(前のコマンドでエラーが発生していない場合にのみ実行します)。
&を使用すると、コマンドを次々に実行できます。例:c:\dir & vim myFile.txt
Cmdのショートカットを(デスクトップなどに)作成したい場合は、/ kパラメータを追加します(/ kはキープ、/ cはウィンドウを閉じます)。
cmd /k echo hello && cd c:\ && cd Windows
call を使用すると、環境変数の評価が早すぎるという問題を解決できます。
set A=Hello & call echo %A%
同じ行で複数のコマンドを実行するときには、いくつかの 処理記号 を使用できます。また、場合によっては処理のリダイレクト、別の場合には出力の変更、または単に失敗することがあります。 1つの重要なケースは、変数を操作するコマンドを同じ行に配置することです。
@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!
0 1
上記の例にあるように、変数を使用するコマンドが同じ行に配置されている場合は、変数値を更新するために遅延展開を使用する必要があります。変数にインデックスが付けられている場合は、CALLコマンドを%%修飾子とともに使用して、同じ行の値を更新します。
set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%
path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
そのため、コンテキストメニューからRegAsm
(register Assembly)を実行するという特定のタスクを有効にしようとしていました。私が持っていた問題は、私がそれを読むことができる前に結果がフラッシュアップして消えるだろうということでした。そのため、コマンドが失敗したときには機能しないPause
へのパイピングを試みました(ここで言及されているように .batスクリプトではPauseコマンドが機能しない およびhere バッチファイルコマンドPAUSEは機能しません )。それで私はcmd /k
を試みました、しかしそれはより多くのコマンドのために窓を開いたままにします(私はただ結果を読みたいです)。そのため、チェーンにpause
とそれに続くexit
を追加すると、次のようになります。
cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
これは魅力的なように動作します - RegAsmはファイルを実行してその結果を表示してから、「続行するには任意のキーを押してください...」というプロンプトが表示されます。
P.S興味のある人は、次の.regファイルエントリを使用して、.dllファイルにdllファイルの関連付けを追加し、それにRegAsmコマンドの拡張子を追加します(エスケープした引用符とバックスラッシュに注意してください)。
[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"
[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"
[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"
[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"
これで、アセンブリを登録するための、右クリックメニューができました。
cmd /c ipconfig /all & Output.txt
このコマンドはコマンドを実行し、Output.txt
ファイルを単一のコマンドで開きます
2つのコマンドを同時に実行するには、2つのコマンドの間に&(アンパサンド)記号を入れる必要があります。そのようです:
color 0a & start chrome.exe
乾杯!
同じウィンドウに2つのpingを送信しようとしましたが、これは同じ行にあるシリアルコマンドです。最初のコマンドを終えたら、2番目のコマンドを実行します。
解決策は、Windows 7のコマンドプロンプトでstart /b
と組み合わせることでした。
/b
を付けずに通常どおりに起動し、別のウィンドウで起動します。
同じ行で起動するために使用されるコマンドは次のとおりです。
start /b command1 parameters & command2 parameters
いずれにせよ、もしあなたが出力をパースしたいのであれば、私はこれを使うことを勧めません。
さて、あなたには2つの選択肢があります:パイピング、あるいは単に&
:
DIR /S & START FILE.TXT
または、
tasklist | find "notepad.exe"
パイプ(|
)は、1つのコマンドの出力を受け取り、それを別のコマンドに入れるためのものです。そして(&
)はこれを実行することを言っているだけなのです。
いいえ、cd / && tree && echo %time%
です。エコーされる時間は最初のコマンドが実行された時です。
配管にはいくつか問題がありますが、それがどのように機能するかを人々が知っている限り、それは重要ではありません。
1行で変数を使用または操作しようとすると、その内容に注意してください。例えば。次のような変数
PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
あなたが%PATH%
としてそれを使うならば、多くの扱いにくいトラブルを引き起こすかもしれません
%PATH%
を使用することはできません%USERPROFILE%
のような参照された変数は何を含みますか?もう1つの例:たとえば、gulp
ビルドシステムを使用する場合
gulp
- デフォルト>ビルド
gulp build
- ビルドフォルダーをビルドする
gulp watch
- ファイル監視を開始する
gulp dist
- dist-folderをビルドする
これを1行で実行できます。
cd c:\xampp\htdocs\project & gulp & gulp watch
はいあります。それは&です。
&1は、コマンド1が完了したときにコマンド2を実行します。
&は関係なく実行されます。
簡単です。 &の記号で区別してください。 例:
echo Hello World && echo GoodBye World
Goodbye Worldは、Hello Worldの後に印刷されます。