batch-file
Voor lussen in batchbestanden
Zoeken…
Syntaxis
- voor / l %% p in (startNumber, increment, endNumber) do-opdracht
- voor / f %% p in (bestandsnaam) opdracht doen
- voor / f %% p in ("textStrings") do-opdracht
- voor / f %% p in ('command') do command
- voor / r drive: \ path %% p in (set) do commando
- voor / d %% p in (directory) do-opdracht
Opmerkingen
De opdracht for
accepteert opties wanneer de vlag /f
wordt gebruikt. Hier is een lijst met opties die kunnen worden gebruikt:
delims=x
Scheidingsteken (s) om tokens te scheidenskip=n
Aantal regels dat moet worden overgeslagen aan het begin van het bestand en de tekenreekseneol=;
Teken aan het begin van elke regel om een opmerking aan te geventokens=n
Genummerde items om te lezen van elke te verwerken regel of stringusebackq
Gebruik een andereusebackq
:Gebruik dubbele aanhalingstekens voor lange bestandsnamen in "bestanden"
Gebruik enkele aanhalingstekens voor 'textStrings'
Gebruik back quotes voor `command`
Elke regel in een bestandenset doorlussen
Het volgende echo elke regel in het bestand C:\scripts\testFile.txt
. Lege regels worden niet verwerkt.
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
Meer geavanceerd voorbeeld laat zien, hoe afgeleid in de FOR-lus van een set beperkte gegevens van bestanden kan worden gebruikt om batch-uitvoering om te leiden, terwijl de gezochte inhoud in een bestand wordt opgeslagen:
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
set "last=%temp%\%%i"
type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
&& (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))
:: add user tasks code here
if defined result echo Performing user tasks...
:end
echo All tasks completed
exit /b
Let op, hoe lange opdrachtreeksen worden opgesplitst in verschillende coderegels en opdrachtgroepen worden gescheiden door haakjes.
Bezoek recursief mappen in een directorystructuur
for /r
commando kan worden gebruikt om recursief alle mappen in een mappenboom te bezoeken en een commando uit te voeren.
@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
rem enter the directory
pushd %%a
echo In directory:
cd
rem leave the directory
popd
)
Opmerkingen:
- voor / r - Door bestanden bladeren (submappen voor verpleegkundigen).
- pushd - Wijzig de huidige map / map en sla de vorige map / pad op voor gebruik door de POPD-opdracht.
- popd - Wijzig de map terug naar het pad / de map die het laatst is opgeslagen met de opdracht PUSHD.
Hernoemen van alle bestanden in de huidige map
Het volgende gebruikt een variabele met een for
lus om een groep bestanden te hernoemen.
SetLocal EnableDelayedExpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:old=new!
set filename=Prefix !filename!
set filename=!filename! Suffix
ren "%%j" "!filename!%%~xj"
)
Door de variabelenaam %%j
definiëren en te koppelen aan alle huidige bestanden (*.*)
, Kunnen we de variabele in een for
lus gebruiken om elk bestand in de huidige map weer te geven.
Elke iteratie (of doorloop) door de lus verwerkt daardoor een ander bestand dan de gedefinieerde groep (die evengoed elke groep kan zijn, bijvoorbeeld *.jpg
of *.txt
).
In het eerste voorbeeld vervangen we tekst: de tekstreeks "oud" wordt vervangen door de tekstreeks "nieuw" (als, maar alleen als de tekst "oud" aanwezig is in de bestandsnaam).
In het tweede voorbeeld voegen we tekst toe: de tekst "Prefix" wordt toegevoegd aan het begin van de bestandsnaam. Dit is geen vervanging. Deze wijziging wordt toegepast op alle bestanden in de groep.
In het derde voorbeeld voegen we opnieuw tekst toe: de tekst "Suffix" wordt aan het einde van de bestandsnaam toegevoegd. Nogmaals, dit is geen vervanging. Deze wijziging wordt toegepast op alle bestanden in de groep.
De laatste regel zorgt eigenlijk voor het hernoemen.
herhaling
for /L %%A in (1,2,40) do echo %%A
Deze lijn doorloopt van 1 tot 39 en neemt telkens met 2 toe.
De eerste parameter, 1
, is het startnummer.
De tweede parameter, 2
, is de toename.
De derde parameter, 40
, is het maximum.