回答:
2000年以降のすべてのMicrosoft OSでこのようになり、今日でも良好です。
dir & echo foo
最初のコマンドが正常に終了した場合にのみ2番目のコマンドを実行する場合:
dir && echo foo
1行で複数のコマンドを実行する単一のアンパサンド(&)構文は、Windows XP、Windows 2000、および一部の以前のNTバージョンに戻ります。(少なくとも4.0、ここの1人のコメント者によると。)
これについては、このページを下にスクロールするとわかるかなりの数のポイントがあります。
教育的であると思われる人のために、過去のデータが続きます。
それ以前は、&&構文は、Microsoftコマンドインタープリターに追加される前のシェル置換4DOSの機能にすぎませんでした。
Windows 95、98、およびMEでは、代わりにパイプ文字を使用します。
dir | echo foo
MS-DOS 5.0以降では、一部の以前のWindowsおよびNTバージョンのコマンドインタープリターを通じて、(文書化されていない)コマンドセパレーターは文字20(Ctrl + T)でしたが、ここでは^ 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
コマンドパラメータを区切るために使用します。
cmd /c "echo foo & echo bar"
。
vagrant up && vagrant ssh
Windowsの10に引用符なしで働いていた
&
-非同期にして両方を並行して実行します。&&
同期で使用していて、最初が成功した場合にのみ続行するため、スタックしました!
&
は、コマンドを非同期または並列にしません。完了後command1 & command2
に実行さcommand2
れ command1
ます。の成功または失敗command1
は無関係です。
&
以下のためのバッシュと同等である;
(実行コマンド)と&&
のバッシュと同等である&&
(以前はエラーが発生していないだけで実行するコマンド)。
;
Linuxではこれまで見たことがない
;
、最初のコマンドを実行し、それが完了するのを待ってから、2番目のコマンドを実行することを意味します。&
最初のコマンドを実行し、それをバックグラウンドにして、2番目のコマンドを実行することを意味します。したがって、両方のプログラムが同時に起動します。これらは結合シンボルではなく、最初のコマンドの末尾のシンボルであることに注意してください。progname &
2つ目のコマンドがなくても、1つのコマンドをバックグラウンドで起動できます。
(デスクトップなどで)cmdショートカットを作成する場合は、/ kパラメータを追加します(/ kは保持を意味し、/ cはウィンドウを閉じます)。
cmd /k echo hello && cd c:\ && cd Windows
callを使用して、評価が早すぎる環境変数の問題を克服できます-例
set A=Hello & call echo %A%
echo
出力します。少なくとも、これは私のWindows 7ボックスで観察したものです。
setlocal EnableDelayedExpansion
スクリプトまたはでcmd /v
)遅延展開を使用することです。次に例を示しますtimeout 5 && cmd /v /c echo !TIME! && echo %TIME%
。
同じ行で複数のコマンドを実行する場合、いくつかの処理シンボルを使用でき、場合によっては処理のリダイレクト、別の場合の出力の変更、または単に失敗する可能性があります。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
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
そのため、RegAsm
コンテキストメニューから実行(アセンブリの登録)の特定のタスクを有効にしようとしました。私が抱えていた問題は、結果がフラッシュして、私がそれを読む前に消えてしまうことでした。そこでPause
、コマンドが失敗したときに機能しないへのパイプを試しました(ここで、一時停止コマンドは.batスクリプトで機能せず、バッチファイルコマンドの一時停止は機能しません)。だから私は試しましたcmd /k
が、それはより多くのコマンドのためにウィンドウを開いたままにします(私は結果を読みたいだけです)。追加私はpause
続いexit
以下で、その結果、チェーンに:
cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
これはチャームのように機能します。RegAsmはファイルに対して実行され、その結果を表示します。次に、「Press any key to continue ...」というプロンプトが表示され、キーが押されるとコマンドプロンプトウィンドウが閉じます。
PS興味のある他の人のために、次の.regファイルエントリを使用して.dllファイルにdllfileの関連付けを追加し、それに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"
これで、アセンブリを登録するための右クリックメニューができました。
同じウィンドウで2つのpingを実行しようとしましたが、これは同じ行のシリアルコマンドです。最初のコマンドを終了した後、2番目のコマンドを実行します。
解決策はstart /b
、Windows 7のコマンドプロンプトでと組み合わせることでした。
なし/b
で通常どおり起動し、別のウィンドウで起動します。
同じ行で起動するために使用されるコマンドは次のとおりです。
start /b command1 parameters & command2 parameters
いずれにしても、出力を解析したい場合は、これを使用することはお勧めしません。コマンドの出力間で出力がスクランブルされていることに気づきました。
さて、あなたは2つのオプションがあります:配管、または単に&
:
DIR /S & START FILE.TXT
または、
tasklist | find "notepad.exe"
パイピング(|
)は、1つのコマンドの出力を取得して別のコマンドに出力するためのものです。そして(&
)はこれを実行することを言っているだけです。
&
し、|
やると、すべての場合、彼らは、どのように異なりますか?現在、これらの概念に不慣れな人は、自分の場合にどちらを使用するかを自分で決めることができません。
いいえ、cd / && tree && echo %time%
。エコーされる時間は、最初のコマンドが実行されたときです。
配管にはいくつかの問題がありますが、人々がそれがどのように機能するかを知っている限り、それは重要ではありません。
もう1つの例:たとえば、gulp
ビルドシステムを使用する場合、
gulp
-デフォルト>ビルド
gulp build
-ビルドビルドフォルダー
gulp watch
-ファイルウォッチを開始
gulp dist
-dist-folderをビルドします
これは1行で実行できます。
cd c:\xampp\htdocs\project & gulp & gulp watch
変数を1行で使用または操作しようとすると、その内容に注意してください。たとえば、次のような変数
PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
そのまま使用すると、手に負えないトラブルが多発する可能性があります。 %PATH%
%PATH%
と、括弧の問題を処理できません%USERPROFILE%
含まれますか?使用&
1行でコマンドを使用するには、ウィンドウ内のシンボル
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
Linuxのように
touch thisfile ; ls -lstrh
はいあります。です&
。
&&
コマンド1が失敗しない限り、コマンド1が完了するとコマンド2が実行されます。
&
関係なく実行されます。
それは簡単です:&&
標識で区別するだけです。例:
echo "Hello World" && echo "GoodBye World".
「ハローワールド」の後に「さようならワールド」が掲載されます。
&&
されている条件最初のコマンドは、(ERRORLEVEL = 0)succeded場合、オペレータ、次のコマンドは、実行されている
Hello World
が失敗しなかった場合。@jebが言ったように、&&
条件付きです。&
前のコマンドが成功したかどうかに関係なくコマンドを実行します。