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...

Frage Entwicklung Batch & Shell

Mitglied: chlages

chlages (Level 1) - Jetzt verbinden

19.03.2008, aktualisiert 20.03.2008, 3307 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
Geschachtelte For Schleife Variable weiter benutzen
gelöst Frage von seb1212Batch & Shell4 Kommentare

Hallo zusammen, ich habe ein kleines Problem, im untenstehenden Code hat die Variable %Datum% in Zeile 13 leider keinen ...

Batch & Shell
Weitergabe von Variablen in for-Schleifen
Frage von MFJustBatch & Shell1 Kommentar

Hallo, Ich versuche HTML Dateien in PDFs umzuwandeln (dies funktioniert) und diese dabei nach Teilen dieser HTML Datei umzubenennen ...

Batch & Shell
Batch Variablen in for-Schleife
gelöst Frage von Dacki1107Batch & Shell2 Kommentare

Hallo Liebe Administratoren Ich kämpfe mit einem kleinen Problemchen und hoffe das Ihr mir helfen könnt. Ich versuche eine ...

Batch & Shell
For schleife mit variablem inhalt
gelöst Frage von Tealk144Batch & Shell5 Kommentare

Hallo zusammen, kann ich in einer Batch Datei folgendes schreiben? for Variable in Satz do ( if exist %buchstabe%: ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 4 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...