Top-Themen

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

Aus einer FOR-Schleife die Variable benutzen anpassen und weiterverwenden...

Mitglied: chlages

chlages (Level 1) - Jetzt verbinden

19.03.2008, aktualisiert 20.03.2008, 3337 Aufrufe, 6 Kommentare

Hallo zusammen,

ich bastel jetzt schon mehrere Stunden an dem Problem herum und komme nicht weiter. Ich hoffe ihr könnt mir helfen:

Ich möchte den Zählerwert der FOR-Schleife auslesen und als neuen Dateinamen verweden. Der Rückgabewert aus der Verzeichnis-Datei lautet "911023". Ich benötige aber für den zukünftigen Dateinamen nur die "102" aus der obigen Nummer.

Ich hoffe ihr könnt mir helfen...


REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST


REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do (
set KURZ=%%I
type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\%KURZ%.art
type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\%KURZ%.tre
)
Mitglied: bastla
19.03.2008 um 22:43 Uhr
Hallo chlages und willkommen im Forum!

Das Schlüsselwort für das Problem / die Lösung lautet "delayedexpansion". Die geänderte Batchdatei sähe damit (ungetestet) so aus:
01.
@echo off & setlocal enabledelayedexpansion
02.
REM * Variablen werden gesetzt *
03.
REM
04.
set DAT_ART=???.art_20080315*
05.
set DAT_TRE=???.tre_20080315*
06.
set DATEI=Verzeichnisse.txt
07.
set QUELLE=U:\Filialen
08.
set ZIEL=D:\TEST
09.
 
10.
 
11.
REM * Kopiervorgang *
12.
REM *
13.
for /F "delims=" %%I in (%DATEI%) do (
14.
    set "KURZ=%%I"
15.
    type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\!KURZ:~2,3!.art
16.
    type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\!KURZ:~2,3!.tre
17.
)
Damit die Variable KURZ innerhalb der Schleife ausgewertet werden kann, muss "delayedexpansion" eingeschaltet ("enable"d) und die Variablenschreibweise von %KURZ% auf !KURZ! abgeändert werden. Da nur die 3 Stellen nach Position 2 benötigt werden, muss der entsprechende Teilstring gebildet werden (siehe dazu auch "set /?").

Eine Alternative wäre die Verwendung eines Unterprogrammes:
01.
@echo off & setlocal
02.
REM * Variablen werden gesetzt *
03.
REM
04.
set DAT_ART=???.art_20080315*
05.
set DAT_TRE=???.tre_20080315*
06.
set DATEI=Verzeichnisse.txt
07.
set QUELLE=U:\Filialen
08.
set ZIEL=D:\TEST
09.
 
10.
 
11.
REM * Kopiervorgang *
12.
REM *
13.
for /F "delims=" %%I in (%DATEI%) do call :ProcessFile "%%I"
14.
goto :eof
15.
 
16.
:ProcessFile
17.
set "KURZ=%~1"
18.
type %QUELLE%\%~1\Backup\%DAT_ART% > %ZIEL%\%~1\im_export\%KURZ:~2,3%.art
19.
type %QUELLE%\%~1\Backup\%DAT_TRE% > %ZIEL%\%~1\im_export\%KURZ:~2,3%.tre
20.
goto :eof
Grüße
bastla

[Edit] Biber-Bug vorweggenommen und dann auch noch als Zweiter korrigiert ("%%I" in den beiden "type"-Zeilen der zweiten Variante durch "%~1" ersetzt) [/Edit]
Bitte warten ..
Mitglied: Biber
19.03.2008 um 22:46 Uhr
Moin chlages,

willkommen im Forum.

Eine Möglichkeit zur Lösung wäre das Aktivieren der "verzögerten Variablenauflösung", einer Option, die Dir ermöglicht, eine Variable innerhalb einer CMD-Anweisung zu setzen und zu verwenden.

01.
 @echo off & setlocal enableDelayedExpansion
02.
REM * Variablen werden gesetzt *
03.
REM
04.
set DAT_ART=???.art_20080315*
05.
set DAT_TRE=???.tre_20080315*
06.
set DATEI=Verzeichnisse.txt
07.
set QUELLE=U:\Filialen
08.
set ZIEL=D:\TEST
09.
 
10.
 
11.
REM * Kopiervorgang *
12.
REM *
13.
for /F "delims=" %%I in (%DATEI%) do (
14.
set LangVar=%%I
15.
set KURZ=!LangVar:~2,3!
16.
type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\!KURZ!.art
17.
type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\!KURZ!.tre
18.
)
Andere Variante ohne DelayedExpansion mit Call:Sub wäre so:
01.
@echo off & setlocal
02.
REM * Variablen werden gesetzt *
03.
REM
04.
set DAT_ART=???.art_20080315*
05.
set DAT_TRE=???.tre_20080315*
06.
set DATEI=Verzeichnisse.txt
07.
set QUELLE=U:\Filialen
08.
set ZIEL=D:\TEST
09.
 
10.
 
11.
REM * Kopiervorgang *
12.
REM *
13.
for /F "delims=" %%I in (%DATEI%) do set "LangVar=%%I" & call:ForEachLine %%I
14.
goto :eof
15.
 
16.
:ForEachLine Als Parameter1 wird die Laufvariable %%I übergeben
17.
set KURZ=%LangVar:~2,3%
18.
type %QUELLE%\%1\Backup\%DAT_ART% > %ZIEL%\%1\im_export\%KURZ%.art
19.
type %QUELLE%\%1\Backup\%DAT_TRE% > %ZIEL%\%1\im_export\%KURZ%.tre
20.
goto :eof
[beides ungetestet]

Grüße
Biber
[Edit]@bastla: Nächstes Mal schreibt jeder von uns eine der beiden Varianten...*gg [/Edit]
[Edit2] Übergabe von %%I an Call:Block ergänzt. Vor bastla. Der hat den gleichen Bug... [/Edit2]
Bitte warten ..
Mitglied: bastla
19.03.2008 um 22:53 Uhr
@Biber

Bis wir das ausgeknobelt haben, sind wir mit beiden Varianten auch schon fertig ...

Grüße
bastla
Bitte warten ..
Mitglied: chlages
20.03.2008 um 09:29 Uhr
Vielen Dank für die schnelle Hilfe !

Habe jetzt die beiden Varianten, ohne die Sprünge aus der Schleife, ausprobiert und habe immer noch das Problem mit der "KURZ" Variable. Irgendwie ist bleibt mein System davon unbeeindruckt.

Wenn ich mir den Wert per "Echo" ausgebe wird er wie gewünscht angezeigt. Aber nachher im "Type" Befehl wird nur die Bezeichnung und nicht der Wert angezeigt.

Christian
Bitte warten ..
Mitglied: chlages
20.03.2008 um 13:52 Uhr
Hallo nochmal,

habe jetzt das Problem gefunden

Ich habe die Endung ".bat" für mein Skript benutzt. Nachdem ich die Endung in ".CMD" geändert habe läüft es jetzt vom feinsten....

Trotzdem vielen Dank für Eure schnelle Hilfe.

Christian
Bitte warten ..
Mitglied: miniversum
20.03.2008 um 16:44 Uhr
Ich habe die Endung ".bat" für mein Skript benutzt. Nachdem ich die Endung in ".CMD" geändert habe läüft es jetzt vom feinsten....

Was??? *Kopfkratz*
Und ich dachte immer das wäre egal?
Wird ja beides vom CMD verarbeitet.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

FOR Schleife mit LOOP und nachfolgender FOR Schleife

gelöst Frage von miczarBatch & Shell6 Kommentare

Hallo zusammen, ich habe ein Problem mit einem Batchfile. Situation: im Netzwerk ist kein WINS mehr vorhanden und so ...

Batch & Shell

For Schleife kaputt?

gelöst Frage von Peter32Batch & Shell5 Kommentare

Hallo, ich finde den Fehler nicht irgendwie bekomme ich ständig denselben Inhalt in "Name.txt" und kann dann nicht weiterarbeiten ...

Microsoft

Skype for Business

Frage von xX-3PO-XxMicrosoft5 Kommentare

Geehrte Kollegen, ich benötige mal so ein paar Information zu Erfahrungen bei einer Umstellung auf Skype for Business. Hierbei ...

Microsoft Office

Skype for Business Plan2

Frage von Leo-leMicrosoft Office4 Kommentare

Hallo Forum, wir sind in der Überlegung "Skype for Business Plan 2" zu migrieren. Nun würde mich mal interessieren, ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 2 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 2 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 4 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 5 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Windows Netzwerk
Kerio. Kann keine Mails empfangen aber senden. Wer ist schuld. Kerio oder Windows domäne?
gelöst Frage von frosch2Windows Netzwerk33 Kommentare

Hallo, es existiert ein Problem bei uns mit dem mailen. Alle bestehenden Nutzer können mailen. Raus wie rein. Neuen ...

Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
gelöst Frage von Leo-leHosting & Housing24 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

LAN, WAN, Wireless
WLAN und Ausmessung - Eine Glaubensfrage?
Frage von ptr2brainLAN, WAN, Wireless23 Kommentare

Liebe Experten, als Sys-Admin habe ich mir schon öfter die Frage gestellt, ob es sich beim Thema WLAN und ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung19 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...