windows - Hvorfor virker 'for' ikke inden for batchfilen? (Fungerer fint udenfor)

Indlæg af Hanne Mølgaard Plasc

Problem



for /F "tokens=*" \%* in (Test.txt) do md ".\%*" & cd "\%*" & md "Something1" & md "Something2" & cd ".."


DOS-kommandoen trækker navne fra tekstfil og opretter en navngivet mappe og derefter to undermapper.


Apple
-Something1
-Something2


Men når jeg lægger det i en batchfil som følger:


@ECHO OFF
@for /F "tokens=*" \%* in (Test.txt) do md ".\%*" & cd "\%*" & md "Something1" & md "Something2" & cd ".."
ECHO Done
PAUSE


Kør derefter det fra Windows GUI, en sreen dukker op, lukker og gør ingenting. Selvom jeg laver en batch med den fungerende DOS-kommando, gør det ingenting. Hvad mangler jeg?


Tak skal du have.

Bedste reference


I batch-filer skal du fordoble '\%' i variablen for. Spørg mig ikke hvorfor. :)

Andre referencer 1


Denne variation virker for mig:


setlocal enabledelayedexpansion
for /F "tokens=*" \%\%g in ('type foo.txt') do (
                md ".\%\%g"
                cd "\%\%g"
                md "Something1"
                md "Something2"
                cd ".."
        )
endlocal


Jeg valgte at sætte række kommandoer mellem parenteser og en på en linje. Din kæde af & - adskilte kommandoer skal også fungere.


Blokken setlocal/endlocal begrænser rækkevidden af ​​variabler. enabledelayedexpansion argumentet muliggør nogle ekstra funktioner i cmd. Det er normalt ikke nødvendigt, fordi det er standard for CMD, men denne standard kan være blevet ændret via politik, så det er en god praksis at inkludere det.


Jeg foretrækker at bruge pushd/popd over cd blah/cd .. i scripts. Jeg synes det er mere robust.