Sök…


Syntax

  • för / l %% p in (startNummer, inkrement, endNumber) gör kommando
  • för / f %% p in (filnamn) gör kommandot
  • för / f %% p in ("textStrings") gör kommandot
  • för / f %% p in ('kommando') gör kommando
  • för / r-enhet: \ path %% p i (set) do-kommando
  • för / d %% p in (katalog) gör kommando

Anmärkningar

Den for kommandot accepterar alternativ när /f flaggan används. Här är en lista med alternativ som kan användas:

  • delims=x Avgränsar tecken (er) för att separera symboler

  • skip=n Antal rader som ska hoppas över i början av fil- och textsträngar

  • eol=; Tecken i början av varje rad för att ange en kommentar

  • tokens=n Numrerade objekt att läsa från varje rad eller sträng som ska bearbetas

  • usebackq Använd en annan citatstil:

    Använd dubbla citat för långa filnamn i "filer"

    Använd enstaka citat för 'textStrings'

    Använd tillbaka citat för "kommando"

Looping genom varje rad i en filuppsättning

Följande kommer att eko varje rad i filen C:\scripts\testFile.txt . Tomma rader behandlas inte.

for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
  echo %%A
  rem do other stuff here
  )

Mer avancerat exempel visar hur härledd i FOR-loop från en begränsad filuppsättningsdata kan användas för att omdirigera körning av batch, samtidigt som det sökta innehållet sparas i en fil:

@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

Observera hur länge kommandosträngar delas upp i flera kodrader och kommandogrupper separeras med parenteser.

Besök rekursivt kataloger i ett katalogträd

for /r kommando kan användas för att rekursivt besöka alla kataloger i ett katalogträd och utföra ett kommando.

@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
  )

Anmärkningar:

  • för / r - Loop through files (Recurse submappar).
  • pushd - Ändra aktuell katalog / mapp och lagra föregående mapp / sökväg för användning med POPD-kommandot.
  • popd - Byt tillbaka katalogen till den sökväg / mapp som senast lagrats av PUSHD-kommandot.

Byt namn på alla filer i den aktuella katalogen

Följande använder en variabel med en for loop för att byta namn på en grupp filer.

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"
  )

Genom att definiera variabelnamnet %%j och associera den med alla aktuella filer (*.*) , Kan vi använda variabeln i en for loop för att representera varje fil i den aktuella katalogen.

Varje iteration (eller pass) genom slingan bearbetar därmed en annan fil från den definierade gruppen (som lika kan ha varit vilken grupp som helst, t.ex. *.jpg eller *.txt ).

I det första exemplet ersätter vi text: textsträngen "gammal" ersätts av textsträngen "ny" (om, men bara om texten "gammal" finns i filens namn).

I det andra exemplet lägger vi till text: texten "Prefix" läggs till i början av filnamnet. Detta är ingen substitution. Denna ändring kommer att tillämpas på alla filer i gruppen.

I det tredje exemplet lägger vi till igen text: texten "Suffix" läggs till i slutet av filnamnet. Återigen är detta ingen substitution. Denna ändring kommer att tillämpas på alla filer i gruppen.

Den sista raden hanterar faktiskt namnet.

Iteration

for /L %%A in (1,2,40) do echo %%A

Den här linjen upprepas från 1 till 39 och ökar med 2 varje gång.

Den första parametern, 1 , är startnumret.

Den andra parametern, 2 , är steget.

Den tredje parametern, 40 , är den maximala.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow