Inhoudsopgave:

Geavanceerde batch: 12 stappen
Geavanceerde batch: 12 stappen

Video: Geavanceerde batch: 12 stappen

Video: Geavanceerde batch: 12 stappen
Video: Generate Studio Quality Realistic Photos By Kohya LoRA Stable Diffusion Training - Full Tutorial 2024, November
Anonim

maar dat is oké, gebruik gewoon de opdracht CD of CHDIR om van map te veranderen. Maar in dit geval maakt het niet zoveel uit.", "top":0.08480565371024736, "left":0.014285714285714285, "height":0.8586572438162544, "width":0.9357142857142857}]">

Geavanceerde batch
Geavanceerde batch
Geavanceerde batch
Geavanceerde batch
Geavanceerde batch
Geavanceerde batch

GELIEVE ALLE VRAGEN DIE U MOGELIJK HEBT NAAR MIJN BLOG: https://tamsanh.com/blog/2008/07/11/batch-tutorial-3-advanced-batch/Ik bezoek geen instructables meer, en u krijgt een snellere antwoord op die manier. Hey jongens! Tam Nguyen hier. Het heeft lang geduurd, maar hij is er nu! Ik presenteer je de volgende aflevering van mijn Batch-zelfstudies! Je hebt misschien (of niet) mijn andere instructables gelezen: Basisprincipes van Batch Iets meer geavanceerde batch Deze Instructable leent enkele elementen uit de eerste twee Instructables. Namelijk:ECHO CommandCD CommandDIR CommandAls je de andere twee niet hebt gelezen, raad ik aan om die commando's snel te bekijken. Ik wacht hier. Ok! Aan het einde van deze Instructable ben je vertrouwd met:START CommandSET CommandIF CommandGOTO Commandand> en >> ParametersMet deze commando's kun je dynamische batchbestanden maken die kunnen veranderen volgens gebruikersinvoer, en maak en breid uit. Dus laten we die goede 'ol Command Prompt openen en aan de slag gaan! Run -> cmdU kunt ook naar: Start-> Program Files-> Accessoires-> Command Prompt Mijn uitleg in deze instructable werd een beetje lang, dus ik heb een aantal commando's opgesplitst in meer dan één pagina, voornamelijk voor esthetische doeleinden; Ik vond het leuk om de foto's te zien terwijl ik de tekst las zonder op en neer te hoeven scrollen. Vuistregel voor het bekijken van foto's; Meestal staat er na elk codefragment een foto. Geniet ervan!

Stap 1: START-opdracht

START-opdracht
START-opdracht
START-opdracht
START-opdracht
START-opdracht
START-opdracht
START-opdracht
START-opdracht

Het START-commando is een leuk klein commando waarmee dingen worden gestart! Het is een eenvoudig commando en helpt ons op te warmen voordat we bij de moeilijkere commando's komen. De parameters van het commando zijn precies wat je denkt dat ze zijn.

START ThingToBeStarted.exeErg makkelijk

START WMPlayer.exeU kunt niet alleen.exe's STARTEN, u kunt ook een website intypen en deze wordt geopend in uw standaardbrowser

START www. Instructables.comLekker makkelijk, hè? OK. Laten we nu verder gaan met het echte vlees van de Instructable: SET Command.

Stap 2: SET-opdracht - Stringtheorie (1/4)

SET-opdracht - Snaartheorie (1/4)
SET-opdracht - Snaartheorie (1/4)
SET-opdracht - Snaartheorie (1/4)
SET-opdracht - Snaartheorie (1/4)

Het SET-commando: de variabelendefiner. Ah. Variabelen. De ambrozijn van de ontwikkelaar. Variabelen zijn stukjes geheugen die… eh, variabel zijn. Geen IF's AND's of NOT's erover! (lol Sorry). OK! Dus hoe werkt deze baby? Heel eenvoudig, de parameters van het SET-commando zijn: SET VariableName=Variable ValueSET op zichzelf zal stringvariabelen creëren.

SET TestVS=Testvariabele string!In dit geval hebben we zojuist de waarde "Test Variable String!" in de variabele TestVS. Nou, dat is allemaal leuk en leuk, maar hoe halen we de variabele waarde op? We gebruiken %. Voeg gewoon % toe rond de naam van de variabele

ECHO %TestVS%Ok cool, maar wat kan het nog meer doen?

Stap 3: SET-opdracht - Mr. Math (2/4)

SET Commando - Mr. Math (2/4)
SET Commando - Mr. Math (2/4)
SET Commando - Mr. Math (2/4)
SET Commando - Mr. Math (2/4)
SET Commando - Mr. Math (2/4)
SET Commando - Mr. Math (2/4)

Kan het rekenen? Laten we een eenvoudige batch maken om het uit te testen.

@ECHO OFFSET-test=1ECHO %Test%SET-test=%Test%-1ECHO %Test%PAUZEWat is er gebeurd? Dat had moeten lukken! Wacht even … wat was dat met SET-commando's die alleen strings maken? Ja. Het SET-commando op zichzelf zal alleen een stringvariabele maken, wat betekent dat het de meest letterlijke interpretatie van de waarde zal creëren. Het denkt niet aan "1 - 1" gelijk aan "0", het denkt aan "1 - 1" gelijk aan "1 - 1". Dus hoe kunnen we dat veranderen? We willen dat de variabele niet direct wordt gekopieerd, maar wordt geëvalueerd. Dit betekent dat we het van een string in een expressie willen veranderen! Een heel gemakkelijke wijziging, voeg gewoon een /a toe aan het SET-commando. Hier is een eenvoudig batchbestand om het in actie te zien, of u kunt het gewoon in de opdrachtprompthandleiding typen. Ik stel het laatste voor; het is veel sneller en de code is niet al te ingewikkeld, maar als je echt het batchbestand wilt, hier is het

@ECHO OFFSET /a Test=2+2ECHO %Test%PAUSEFantastisch! Het drukte het perfect uit. Nu weten we welke wijzigingen er moeten worden aangebracht in onze 'math test.bat'

@ECHO OFFSET /a Test=1ECHO %Test%SET /a Test=%Test%-1ECHO %Test%PAUZEOK. Dus laten we het uitvoeren! Geweldig! Het werkte perfect! Maar wat nu?

Stap 4: SET-opdracht - Gebruikersinvoer (3/4)

SET Commando - Gebruikersinvoer (3/4)
SET Commando - Gebruikersinvoer (3/4)
SET Commando - Gebruikersinvoer (3/4)
SET Commando - Gebruikersinvoer (3/4)
SET Commando - Gebruikersinvoer (3/4)
SET Commando - Gebruikersinvoer (3/4)

De SET heeft ook de mogelijkheid om de gebruiker om invoer te vragen. Door /p toe te voegen aan de SET-parameters, wordt deze getransformeerd van een normale variabele setter naar een door de gebruiker bestuurde variabele setter.

SET /p UDefinieer=Met de /p pauzeert het programma en wacht het op de invoer van de gebruiker. Maar wacht, ik zie geen /a parameter, betekent dit dat de variabele alleen een string is? Nou ja, een soort van. De /p van de parameters negeert de /a volledig, en als je het probeert, krijg je gewoon een Missing operand-fout. Dit betekent dat de door de gebruiker gedefinieerde variabele niet in staat zal zijn om uitdrukkingen te evalueren. Dus wat kan iemand doen? Wel, hier is een lastige truc die ik bedacht die we kunnen gebruiken. Het SET-commando doet niet al het gelijktijdige gebruik van parameters /p en /a, toch? Welnu, hoe zit het met het sequentiële gebruik van de parameters /a en /p? Ahhh… jij sluwe laarzen

@ECHO OFFECHO Calculator Versie 1.0ECHO. SET /p UDefine=SET /a UDefine=%UDefine%ECHO =ECHO %UDefine%ECHO. PAUSELeuke rekenmachine heb je daar. Als je er nu nog niet achter bent, is de {{{ECHO.}}} een lege regel. Is dat niet cool-cool?

Stap 5: SET-opdracht - meer dan op het eerste gezicht (4/4)

SET-commando - meer dan op het eerste gezicht (4/4)
SET-commando - meer dan op het eerste gezicht (4/4)
SET-commando - meer dan op het eerste gezicht (4/4)
SET-commando - meer dan op het eerste gezicht (4/4)
SET-commando - meer dan op het eerste gezicht (4/4)
SET-commando - meer dan op het eerste gezicht (4/4)

Op dit moment lijkt het erop dat de variabelen van het SET-commando alleen goed zijn voor strings en expressies. Niet waar. De variabelen zijn in feite heel erg flexibel en zijn niet alleen beperkt tot ECHO's. Heb je geprobeerd om alleen een variabele te typen?

SET-test=Instructables%Test%Wat een rare fout… er staat dat het commando "Instructables" niet wordt herkend, niet dat %Test% geen syntaxis had. Dat betekent dus dat DOS elke variabele behandelt alsof deze met de hand is getypt. Nou, wat als?

SET Test=START cmd.exe%Test%Geweldig! Het werkte! DOS behandelt elke variabele alsof het door de gebruiker is getypt en voert het dienovereenkomstig uit. Hier is een interessante code: (Gewoon kopiëren/plakken; het is een beetje vervelend.

@ECHO OffSET-variabele1=ECSET-variabele2=HSET-variabele3=O CSET-variabele4=ooSET-variabele5=l!ECHO %Variable1%%Variable2%%Variable3%%Variable4%%Variable5%ECHO.%Variable1%%Variable2%%Variable3%%Variable4% %Variabele5%PauzeIs dat niet netjes? Elke variabele bevat twee letters van het hele bericht (behalve Variabele 2), en door de variabelen op volgorde te zetten, telt elke letter op en voltooit het hele commando van ECHO Cool! Het SET-commando is een van de meer gecompliceerde en krachtige commando's van de DOS-woordenboek.

Stap 6: IF Commando - Iedereen is gelijk (1/2)

IF Commando - Iedereen is gelijk (1/2)
IF Commando - Iedereen is gelijk (1/2)
IF Commando - Iedereen is gelijk (1/2)
IF Commando - Iedereen is gelijk (1/2)
IF Commando - Iedereen is gelijk (1/2)
IF Commando - Iedereen is gelijk (1/2)

Die klassieke voorwaardelijke operand. Eenvoudig, maar toch krachtig. Voor degenen die nog nooit eerder hebben geprogrammeerd, is het IF-commando precies zoals het klinkt. Als een uitdrukking in de syntaxis waar (of NIET waar) blijkt te zijn, wordt de volgende reeks opdrachten uitgevoerd. De basisopdrachtregel gaat als volgt:

IF %variable1%==%variable2% ECHO Dit deel wordt uitgevoerdof als je meer dan één syntaxis hebt

@ECHO OFFIF %variable1%==%variable2% (ECHO Dit deel wordt uitgevoerd. ECHO Zo is dit.) ELSE (ECHO Als variabele1 niet&apost = variabele 2, gebeurt dit. ECHO en dit gebeurt ook.)Opmerking: de merkwaardige plaatsing van haakjes is niet omdat ik niet in georganiseerde code geloof, maar omdat als ze niet op die plaatsen staan, het hele IF-fragment niet zal werken. Dus als er een fout is met uw IF-code, komt dit hoogstwaarschijnlijk door de haakjes. Om deze specifieke batch uit te voeren, heb ik de opdrachtprompt zelf gebruikt, zodat ik de variabelen kon instellen zonder de IfVariableTest.bat-meerdere te hoeven bewerken keer.

Stap 7: IF Command - Maar ik ben groter dan jij (2/2)

IF Commando - Maar ik ben groter dan jij (2/2)
IF Commando - Maar ik ben groter dan jij (2/2)
IF Commando - Maar ik ben groter dan jij (2/2)
IF Commando - Maar ik ben groter dan jij (2/2)
IF Commando - Maar ik ben groter dan jij (2/2)
IF Commando - Maar ik ben groter dan jij (2/2)

Ok, dus je hebt een mooie IF-verklaring en zo, en controleren of variabelen gelijk zijn of niet, is leuk en zo, maar past niet helemaal. Ik wil dat er iets gebeurt als variabele 1 kleiner is dan de andere variabele! Voor degenen onder ons programmeurs, weet ik dat dit een eenvoudige taak lijkt. Doe gewoon wat alle andere programmeertalen doen! Houd je paarden cowboy vast. Niet zo snel. Een batchbestand is niet alleen uw gewone oude programmeertaal. Hoe dwaas het ook mag lijken, de "" werken niet met batchbestanden.

EQU - Gelijk - ==NEQ - Niet gelijkLSS - Kleiner dan GTR - Groter danLEQ - Kleiner dan of gelijk aan GEQ - Groter dan of gelijk aanPlaats deze operanden gewoon in plaats van de ==Voorbeeld

IF 32 GTR 3 ECHO Dit zal werken

@ECHO OFFIF 32 GEQ 32 (ECHO 32 is groter dan, of gelijk aan 32) ELSE (ECHO 32 is zeker gelijk aan 32) PAUSEIF 32 LSS 32 (ECHO 32 is kleiner dan 32? Ik denk het niet.) ELSE (ECHO 32 is Niet minder dan 32. Einde van het verhaal.) PAUZE

Stap 8: GOTO Commando

GOTO-opdracht
GOTO-opdracht
GOTO-opdracht
GOTO-opdracht
GOTO-opdracht
GOTO-opdracht

Het GOTO-commando. Het doet precies wat het zegt; het GAAT NAAR een label in het batchbestandscript. Om deze opdracht te gebruiken, moet u eerst een label hebben. Etiketten zien er als volgt uit:

:Label1Het is gewoon een dubbele punt voor een reeks letters en/of cijfers zonder spatie. Het GOTO-commando is als volgt gestructureerd

GOTO-label1Het is zo makkelijk! Nu ik erover nadenk, ik weet niet precies waarom ik dit niet in de Slightly Advanced Batch heb geplaatst. In ieder geval kan dit commando worden gebruikt om een batchbestand te herhalen door simpelweg GOTO een label te geven dat het GOTO-commando opnieuw uitvoert

@ECHO OFF:RepeatMeECHO Dit wordt herhaald tenzij u op "CTRL-C" GOTO RepeatMe druktHet batchbestand spreekt trouwens de waarheid. CTRL-C is de universele pauze en prompt voor beëindiging. CTRL-S is gewoon Pauze. Maar het venster sluiten werkt net zo goed. De GOTO kan uw code ook overslaan of opnieuw ordenen

GOTO TurnEOffGOTO MultipleGotoECHO Deze ECHO wordt overgeslagen.:MultipleGotoGOTO 3:ENDPAUSEEXIT:1ECHO The EndGOTO END:3ECHO Dit wordt als eerste weergegevenGOTO 2:TurnEOff@ECHO OFFGOTO MultipleGoto:2ECHO Dit is de tweede, ook al is deze de laatste in de code. GOTO 1De bovenstaande code is opzettelijk verwarrend gestructureerd om het vermogen van GOTO om in de code rond te springen te benadrukken.

Stap 9: > Parameter (1/2)

Voorbeeld implementatie
Voorbeeld implementatie
Voorbeeld implementatie
Voorbeeld implementatie
Voorbeeld implementatie
Voorbeeld implementatie
Conclusie: laatste opmerkingen
Conclusie: laatste opmerkingen

Commando>BestandsnaamOké, laten we zeggen dat we in een bepaalde directory zitten. We gebruiken dan het DIR-commando, dat, als je de basisprincipes van batch leest, zou weten dat het de inhoud van je huidige map toont

C:\Users\Neo\>DIRZou normaal output

Volume in station C is HP Volume Serienummer is BC7E-E26C Directory van C:\Users\Neo2007-30-06 11:14.2007-30-06 11:14..2007-03-17 18:41 PM.idlerc2007-02-19 15:14 Contacten2007-06-19 22:44 Desktop2007-06-29 08:47 Documenten2007-06-19 10:35 Downloads2007-02-19 15:14 Favorieten19/02/ 2007 15:14 Links2007-12-05 16:01 Muziek2007-06-30 01:20 Foto's2007-04-07 15:08 Opgeslagen spellen2007-02-19 15:14 Zoekopdrachten2007-01-03 07:23 PM 242, 947 Test Record.wma2007-06-19 10:39 Video's 18-06-2007 09:57 1, 324, 574 wp_screenprint_mc.pdf 18-06-2007 09:59 73, 996, 533 wp_tshirt_full.mp4 4 Bestand(en) 75, 564, 054 bytes 14 Dir(s) 132, 927, 537, 152 bytes gratisMaar als we de > en eraan toevoegen

C:\Users\Neo\DIR>DIRContents.txtWe krijgen geen uitvoer, maar in plaats daarvan krijgen we een gloednieuw tekstbestand met de naam DIRContents.txt met de uitvoer erin! Coolness! Maar wacht, er is een probleem! Ik wil meerdere uitgangen in hetzelfde bestand hebben, maar mijn > blijft het gewoon overschrijven en niet toevoegen! Wat zal ik doen?

Stap 10: >> Parameter (2/2)

DIR>>DIRContents.txtNetjes! Werkte perfect! Dus wacht. Betekent dit dat ik alles wat ik wil in een tekstbestand kan schrijven? ik wil het proberen

Batch is geweldig>Awesome.txtWat? Waarom werkte dat niet? Het is omdat de parameter alleen de uitvoer van legitieme commando's schrijft, niet alleen alles wat je typt. Maar dit is een probleem dat eenvoudig is opgelost. Onthoud dat de parameters de uitvoer van opdrachten vastleggen. Welk commando heeft een output die we kunnen besturen? Juist! Het ECHO-commando

ECHO Batch Is Awesome>Awesome.txtECHO Ik ben zo blij dat ik het weet.>>Awesome.txtHoera! Onthouden. De >> voegt de uitvoer toe aan de volgende regel van het bestand.

Stap 11: Voorbeeldimplementatie

OK. Dus laten we het allemaal op een rijtje zetten! Hier zijn enkele voorbeeldcodes die ik heb gemaakt die de opdrachten gebruiken die ik je in deze instructable heb laten zien. Deze code voegt continu 1 toe aan een variabele en geeft het resultaat voor onbepaalde tijd weer.

@ECHO OFFSET /a num=1:HerhaalECHO %num%SET /a num=%num%+1GOTO HerhalenDeze code zal CMD.exe 5 keer starten

@ECHO OFFSET /a RepeatNum=5:OpenIF %RepeatNum%==0 GOTO EndSTART CMD.exeSET /a RepeatNum=%RepeatNum%-1GOTO Open:EndDeze code maakt een batchbestand aan in C:\Users\Neo en voert het uit

@ECHO OFFCHDIR C:\Users\NeoECHO @ECHO OFF>Hallo.batECHO ECHO Hallo!>>Hallo.batECHO ECHO Ik zit op je C-schijf!>>Hallo.batECHO PAUZE>>Hallo.batC:\Users\Neo\Hallo. batPauzeDit is een kleine batch game. Je moet het getal raden

@ECHO OFFSET /a GuessNum=0SET /a Answer=%RANDOM%ECHO Raad eens aan welk nummer ik denk.:RetrySET /p Guess=IF %Guess% LSS %Answer% ECHO Mijn nummer is hoger. IF %Guess% GTR %Answer % ECHO Mijn nummer is lager. IF %Guess%==%Answer% GOTO ENDECHO. SET /a GuessNum=%GuessNum%+1GOTO Probeer het opnieuw:ENDECHO Je hebt gelijk! Het antwoord was %Answer%ECHO Het duurde %GuessNum% Guesses. ECHO. PAUSEEn deze vind ik erg leuk. Als u echter niet voorzichtig bent, kan het vrij snel uit de hand lopen, afhankelijk van de mogelijkheden van uw computer. Wat dit bestand doet, is dat het voor onbepaalde tijd genummerde tekstbestanden maakt in een map met de naam lolnumbers. Elk van deze tekstbestanden bevat de DIR van de lolnumbers-directory. Het punt is, de directory wordt steeds voller en voller met tekstbestanden, dus elk opeenvolgend tekstbestand is groter dan het vorige. Het resultaat hiervan is een map waarvan de totale grootte elke seconde groter en groter wordt

@ECHO OFFSET /a num=1MKDIR lolnumbersCD lolnumbers:RestartDIR>%num%.txtSET /a num+=1GOTO Opnieuw opstartenDit zijn vrij eenvoudige codes. Experimenteer er naar hartenlust mee.

Stap 12: Conclusie: laatste opmerkingen

Opluchting. We hebben heel veel behandeld in deze instructable. Deze is in feite 3 keer langer dan mijn vorige. Ik hoop dat je ervan hebt genoten! Nog een paar herinneringen voordat ik ga. Onthoud: plaats bij het INSTELLEN van een variabele nooit een spatie tussen de variabele en de waarde ervan. JA:

SET variabele1=WaardeDe extra spatie zorgt ervoor dat uw variabele leeg is. NO

SET variabele1 = WaardeOok de meerdere IF's. Vergeet niet om de haakjes correct op te maken: JA

IF 1==1 (ECHO Eén is gelijk aan één!) ELSE (ECHO Er is iets mis met dit programma.)NEE

IF 1==1(ECHO één is gelijk aan één!)ELSE(ECHO Er is iets mis met dit programma.)Er zijn ook ingebouwde variabelen

%CD%%DATUM%%TIJD%%RANDOM%%CD% Vouwt uit naar de huidige map. Kortom, het pad achter de eerste >%DATE% en %TIME% zijn de datum en tijd.%RANDOM% geeft een willekeurig getal tussen 0 en 32767. Het bereik kan volgens mij niet worden gewijzigd. En dat is het eigenlijk! Ik hoop dat je deze instructable leuk vond, ik heb er heel hard aan gewerkt. Hopelijk zal het de afwezigheid van 10 maanden goedmaken. Nu het slechte nieuws. Ik zal de komende maanden wat moeite hebben om alle vragen te beantwoorden, omdat ik het land uit zal zijn. Maar als je een vraag hebt, laat dan gewoon een reactie achter. Als ik toegang tot een computer krijg, zal ik zeker antwoorden, maar ik denk niet dat dat nodig zal zijn; Instructables is een vriendelijke gemeenschap en ik weet zeker dat er iemand is die je zal helpen in je benarde situatie. Veel plezier met batchen!

Aanbevolen: