batch-file
För öglor i batchfiler
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 symbolerskip=n
Antal rader som ska hoppas över i början av fil- och textsträngareol=;
Tecken i början av varje rad för att ange en kommentartokens=n
Numrerade objekt att läsa från varje rad eller sträng som ska bearbetasusebackq
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.