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 scheiden

  • skip=n Aantal regels dat moet worden overgeslagen aan het begin van het bestand en de tekenreeksen

  • eol=; Teken aan het begin van elke regel om een opmerking aan te geven

  • tokens=n Genummerde items om te lezen van elke te verwerken regel of string

  • usebackq Gebruik een andere usebackq :

    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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow