Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 5679 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 8
gelöst Username als Variable in Registry benutzen (4)

Frage von pablovic zum Thema Windows 8 ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...