Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Variable in For Schleife bei Batch benutzen

Frage Microsoft

Mitglied: aKaLexeD

aKaLexeD (Level 1) - Jetzt verbinden

23.02.2011 um 18:11 Uhr, 5722 Aufrufe, 13 Kommentare

Hallo,

habe eine Batch mir For schleife.

For %%f IN (*.XML) do (

bla bla bla
bla bla bla
bla bla bla

SET FILE=%%f
)

möchte in jedem einzelnen vorgang file benutzen.
FILE ist aber leer.

Wie krieg es hin dass die Batches in der Schleife %%f nicht vergisst?
Mitglied: LittleFlame
23.02.2011 um 18:26 Uhr
Hallo KarlAlexander,

versuch es mal anstatt mit:

For %%f IN (*.XML) do (

bla bla bla
bla bla bla
bla bla bla

SET FILE=%%f
)

mit

FOR %%f IN (*XML) do (

bla bla bla
bla bla bla
bla bla bla

call :FILESET %%f

)

:FILESET
set FILE = %1


Auch wenn ich mir sicher bin, dass es bessere Lösungen gibt und ich nicht genau weiß, ob meine Denkweise richtig ist.
Wahrscheinlich krieg ich gleich von bastla o.ä. eins übergebraten. ^^

Ich versuch nur zu helfen und zu lernen :-P

Grüße,
LF
Bitte warten ..
Mitglied: Friemler
23.02.2011 um 18:31 Uhr
Hallo LittleFlame,

Dein Ansatz ist schon richtig. Falls in dem
01.
bla bla bla 
02.
bla bla bla 
03.
bla bla bla
schon %FILE% benutzt werden soll, muss das alles aber in das Unterprogramm FILESET.

Außerdem würde ich schreiben:
call :FILESET "%%f"
Das verhindert, dass Dateinamen, die Leerzeichen enthalten, zerhackt und statt als EIN Parameter als MEHRERE Parameter übergeben werden.

und
set "FILE=%~1"
Die Tilde entfernt die umgebenden Anführungszeichen von %1. Die Anführungszeichen um FILE=%~1 verhindern, dass sich aus versehen ein Leer- oder Tabzeichen an den Dateinamen in %1 "pappt".

@KarlAlexander1990
Schau Dir mal mein Tutorial zur FOR-Schleife an, besonders das Kapitel "Exkurs (verzögerte) Variablenerweiterung" und die "Praxistipps". ACHTUNG! Mitdenken und selbst Testprogramme entwickeln und ausprobieren ist gefragt!

Gruß
Friemler
Bitte warten ..
Mitglied: LittleFlame
23.02.2011 um 18:42 Uhr
Hallo Friemler,

also nur, damit ich s auch richtig verstanden habe:

FOR %%f IN (*XML) do
(
call :FILESET "%%f"
)

:FILESET
set "FILE = %~1"
bla bla bla
bla bla bla
bla bla bla


@ Friemler
Wie hebe ich doch gleich Codezeilen hervor?


Schönen Abend an alle,
LF
Bitte warten ..
Mitglied: Friemler
23.02.2011 um 18:48 Uhr
Hallo LittleFlame,

jepp, richtig. Aber auch an das
exit /b
bzw.
goto :eof
am Ende des Unterprogramms denken . Von wegen Back to Caller.

Zum formatieren von Codezeilen:
In der Eingabebox für Kommentare gibt es oben einen in ROT hervorgehobenen Link auf die Formatierungshilfe. Oder Du klickst unter meinem Beitrag auf "Mit Zitat" und schaust Dir an, was ich so getippselt habe.

Gruß
Friemler
Bitte warten ..
Mitglied: aKaLexeD
23.02.2011 um 19:02 Uhr
Leider, muss die bla bla bla in der for schleife sein.
das heißt: es werden sachen mit FILE ausgeführt und die sollen jedes mal aufgerufen werden sofern ein Datei gefunden wird.

In dem oben angegeben beispiel hab ich zwar %%f übergeben aber kann nur mit dem letzten was anfangen da zuerst di forschleife durchläuft und dann der rest.

Wobei ich ja eigentlich auch so machen kann

FOR %%f IN (*XML) do
(
call :FILESET "%%f"
GOTO NEXT
)

:NEXT
:FILESET
set "FILE = %~1"
bla bla bla
bla bla bla
bla bla bla


ODER?
Kann mir jemand die Lösung innerhalb der schleife geben?
Bitte warten ..
Mitglied: bastla
23.02.2011 um 19:08 Uhr
Hallo KarlAlexander1990!

Eigentlich sollte das so aussehen:
01.
setlocal 
02.
FOR %%f IN (*.XML) do ( 
03.
    call :FILESET "%%f" 
04.
05.
goto :eof 
06.
 
07.
:FILESET 
08.
set "FILE=%~1" 
09.
bla bla bla 
10.
bla bla bla 
11.
bla bla bla 
12.
goto :eof
wobei Du die Zeilen 2 bis 4 auch zu
FOR %%f IN (*.XML) do call :FILESET "%%f"
zusammenfassen kannst.

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
23.02.2011 um 19:10 Uhr
Hallo KarlAlexander1990,

Du hast mein Tutorial zur FOR-Schleife noch nicht gelesen.

Alles, was Du mit der Variablen %FILE% machen willst, muss in ein Unterprogramm, oder Du aktivierst und benutzt die verzögerte Variablenerweiterung. Das ist bei Dateinamen aber gefährlich, da sie ein Ausrufezeichen enthalten könnten, was auch als Steuerzeichen zur Kenntlichmachung von verzögert zu erweiternden Variablen dient => es kommt zu Fehlern.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
23.02.2011 um 19:17 Uhr
Das ist bei Dateinamen aber gefährlich, da sie ein Ausrufezeichen enthalten könnten, was auch als Steuerzeichen zur Kenntlichmachung von verzögert zu erweiternden Variablen dient => es kommt zu Fehlern.
... wobei es zur Not auch so ginge:
01.
setlocal disabledelayedexpansion 
02.
for %%f in (*.XML) do ( 
03.
    set "FILE=%%f" 
04.
    setlocal enabledelayedexpansion 
05.
    echo !FILE! 
06.
    type "!FILE!" 
07.
    echo bla bla bla 
08.
    endlocal 
09.
)
Grüße
bastla
Bitte warten ..
Mitglied: Friemler
23.02.2011 um 19:20 Uhr
Hi bastla,

geht schon, ist aber HÄSSLICH.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
23.02.2011 um 19:22 Uhr
Hallo Friemler!

Auf Widerspruch brauchst Du nicht zu warten ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
23.02.2011 um 19:36 Uhr
[OT] Moin Friemler
Zitat von Friemler:
geht schon, ist aber HÄSSLICH.
Na ja...
Soll ich mal zum Vergleich ein Foto meiner Ex-Schwiegermutti hochladen?
Da wären auch einige Details nur ganz verzögert zu erweitern...

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: Friemler
23.02.2011 um 19:45 Uhr
[OT]
Hi Biber,

nee, lass mal die Ex-Schwiegermutti auf der heimischen Festplatte verstauben. Es gibt Dinge, die die Welt nicht braucht. Hässliche Schwiegermütter/hässlichen Code nimmt man nur im Notfall in Kauf.

Gruß
Friemler
[/OT]
Bitte warten ..
Mitglied: aKaLexeD
24.02.2011 um 08:36 Uhr
Bastla deine Lösung ist perfekt.
Danke an alle! =D
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Dateinamen auslesen und in einer Schleife benutzen (12)

Frage von TeholBeddict zum Thema Batch & Shell ...

Batch & Shell
Verschachtelte For Schleife für Batch Neuling (3)

Frage von yperiu zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Aktuelle Codepage in Variable speichern (3)

Frage von tomaschku zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Firewall
gelöst Firewall Firmeneimsatz (23)

Frage von wiesi200 zum Thema Firewall ...

LAN, WAN, Wireless
Eine Netzwerkdose im Wechsel für zwei unterschiedliche Netze (11)

Frage von kartoffelesser zum Thema LAN, WAN, Wireless ...

Windows Server
ESXI Free Windows Server 2016 Datacenter aktivieren (11)

Frage von iDeathz zum Thema Windows Server ...

Windows Netzwerk
Ordner-Freigabe außerhalb der Domäne (9)

Frage von Remsboys zum Thema Windows Netzwerk ...