Vreau să trec de două comenzi în Windows CMD consola.
În Linux aș face-o astfel de prognoze
touch thisfile ; ls -lstrh
Cum se face asta pe Windows?
Astfel pe toate sisteme de operare Microsoft din 2000, și încă bine azi:
dir & echo foo
Dacă doriți cea de-a doua comandă pentru a executa numai dacă primul a ieșit cu succes:
dir && echo foo
Singur ampersand (&) sintaxa pentru a executa mai multe comenzi pe o linie merge înapoi la Windows XP, Windows 2000, și unele mai devreme NT versiuni. (4.0 cel puțin, în funcție de un comentator aici.)
Există destul de câteva alte puncte în legătură cu asta care te'll găsi defilare în jos pe această pagină.
Date istorice cum urmează, pentru cei care pot găsi de învățământ.
Înainte de aceasta, && sintaxa a fost doar o caracteristică de coajă de înlocuire 4DOS înainte de această caracteristică a fost adăugat la Microsoft interpretor de comenzi.
În Windows 95, 98 și me, te'd folosi conducta de caractere în loc de:
dir | echo foo
În MS-DOS 5.0 și mai târziu, prin unele anterioare de Windows NT și versiuni de comanda interpret, (fara acte) de comandă separator fost personajul 20 (Ctrl+T), pe care am'll reprezintă cu ^T aici.
dir ^T echo foo
Un citat din documentația:
Utilizarea mai multor comenzi și prelucrare condiționată simboluri
puteți rula mai multe comenzi de la o singură linie de comandă sau cu ajutorul scriptului de prelucrare condiționată simboluri. Când executați mai multe comenzi cu prelucrare condiționată simboluri, comenzile de la dreptul de prelucrare condiționată simbol acționa pe baza rezultatelor de comandă la stânga de prelucrare condiționată simbol.
De exemplu, ați putea dori pentru a rula o comandă numai dacă comanda anterioară nu reușește. Sau, ați putea dori pentru a rula o comandă numai dacă comanda anterioară este de succes.
puteți utiliza caractere speciale enumerate în tabelul următor pentru a trece mai multe comenzi.
& [...]
command1 & command2
Utilizați pentru a separa mai multe comenzi pe o singură linie de comandă. Cmd.exe se execută la prima comandă, și apoi cea de-a doua comanda.
&& [...]
command1 && command2
Utilizați pentru a rula comanda următoarele && doar dacă comanda anterioară simbol este de succes. Cmd.exe se execută la prima comandă, și apoi se execută a doua comanda numai dacă prima comandă finalizată cu succes.
|| [...]
command1 || command2
Utilizați pentru a rula comanda următoarele || numai în cazul în care comanda precedentă || nu. Cmd.exe se execută la prima comandă, și apoi se execută a doua comanda numai dacă prima comanda nu a finaliza cu succes (primește un cod de eroare mai mare decât zero).
( ) [...]
(command1 & command2)
Folosi pentru a grupa sau cuib mai multe comenzi.
; sau ,
command1 parametrul1;parametru2
Utilizați pentru a separa parametrii de comandă.
Un număr de prelucrare simboluri poate fi folosit atunci când rulează mai multe comenzi pe aceeași linie, și poate duce la prelucrarea redirecționarea, în unele cazuri, modificarea ieșire în alt caz, sau doar nu reușesc. Un caz important este plasarea pe aceeași linie de comandă care manipulează variabile.
@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!
0 1
După cum puteți vedea în exemplul de mai sus, atunci când comenzile folosind variabile sunt plasate pe aceeași linie, trebuie să utilizați întârziată de expansiune pentru a actualiza valori variabile. Dacă variabila este indexat, folosiți de comanda cu %% modificatori pentru a actualiza valoarea acestuia pe aceeași linie:
set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%
path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
Deci, am fost încercarea de a permite sarcini specifice de funcționare RegAsm exe
(registrul de asamblare) la un meniu contextual. Problema am avut-o a fost că rezultatul ar fi flash și du-te departe înainte de a putea citi. Așa că am încercat conducte de a "Pauză", care nu funcționează în cazul în care comanda nu (după cum sa menționat aici https://stackoverflow.com/questions/9882019/pause-command-not-working-in-bat-script și aici https://stackoverflow.com/questions/4666045/batch-file-command-pause-does-not-work). Așa că am încercat cmd /k
dar care lasă fereastra deschisă pentru mai multe comenzi (vreau doar să citească rezultatul). Așa că am adăugat o "pauză", urmat de "ieșire" a lanțului, care rezultă în următoarele:
`cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pauză & ieșire
Aceasta funcționează ca un farmec-RegAsm exe ruleaza pe fișier și afișează rezultatele sale, apoi o "Apăsați orice tastă pentru a continua..." prompt este prezentat, apoi fereastra de comandă se închide atunci când este apăsată o tastă.
P. S. Pentru alții care ar putea fi interesat, puteți utiliza următoarele .reg intrări pentru a adăuga un dllfile asociere cu .fișiere dll și apoi o RegAsm exe de comandă extensie a că (observați scăpat citate și backslash-uri):
[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"
Acum am un frumos clic-dreapta meniu pentru a înregistra un ansamblu.
Încerc să am două ping-uri în aceeași fereastră, și este o serie de comandă pe aceeași linie. După ce a terminat prima, se desfasoara cea de-a doua comanda.
Soluția a fost de a combina cu start /b` pe un Windows 7 de comandă.
Începe, ca de obicei, fără a /b
, și lanseze într-o fereastră separată.
Comanda utilizată pentru a lansa în aceeași linie este:
start /b command1 parameters & command2 parameters
Orice mod, dacă doriți pentru a analiza ieșire, nu't vă recomandăm să utilizați acest lucru. Am observat de ieșire este amestecat între producția de comenzi.
Ei bine, aveți două opțiuni: Conducte, sau, pur și simplu&`:
DIR /S & START FILE.TXT
Sau,
tasklist | find "notepad.exe"
Conducte (|
) este mai mult pentru a lua ieșire de o singură comandă, și pune-l într-un alt. Și (&
) este doar fuga asta, și asta.
Un singur exemplu: De exemplu, atunci când vom folosi indian` de a construi sistemul, în loc de
indian` - default > construi
`înghițitură construi - build build-folder
înghițitură uit
- start file-uita-te
înghițitură dist
- construi dist-folder
Putem face asta cu o singură linie:
cd c:\xampp\htdocs\project & gulp & gulp watch
It's simplu: doar pentru a le diferenția cu &&
semne.
Exemplu:
echo "Hello World" && echo "GoodBye World".
"la Revedere Lume" vor fi tipărite după "Hello World".
Atunci când încercați să utilizați sau de a manipula variabile într-o singură linie feriți-vă de conținutul lor! E. g. o variabilă, cum ar fi următoarele
PATH=C:\Program Files (x86)\undeva;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
poate duce la o mulțime de lasă-capabil probleme dacă îl folosiți ca CALEA %%
%USERPROFILE%
conțin?Da, există. L's&`.
&&
va executa ordinul 2, atunci când comanda 1 este complet furnizarea n't eșua.
&
se va executa indiferent.