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 aus String wird nicht aufgelöst - Batch

Frage Entwicklung Batch & Shell

Mitglied: ForgottenRealm

ForgottenRealm (Level 1) - Jetzt verbinden

27.08.2010, aktualisiert 28.08.2010, 4938 Aufrufe, 3 Kommentare

Hallo

Ich stehe wieder einmal vor einem Problem, welches ich auch nach längerer Zeit nicht lösen konnte.


Hiermit wird eine csv Datei ausgelesen, wobei die erste Zeile (überschriften, beschreibungen) übersprungen wird.

01.
[...] 
02.
 
03.
:: Auslesen der Quell- und Zieldaten aus Datenbank 
04.
for /F "skip=1 delims=" %%I IN (%INDEX%) DO set "LINE=%%I" & Call :Start 
05.
 
06.
[...] 
07.
:: Für jede Zeile in der csv Datei wird nun in mit den Tokens 1 bis x ein einzelner Wert ausgelesen und in eine Variable gespeichert. 
08.
 
09.
	:Start 
10.
:: Sicherungsname 
11.
for /F "tokens=1 delims=;" %%J IN ("%LINE%") DO set "JOBNAME=%%J" 
12.
:: Zielordner ohne Laufwerksangabe 
13.
for /F "tokens=2 delims=;" %%K IN ("%LINE%") DO set "TARGETPATH=%%K" 
14.
:: Quellordner ohne Umgebungsvariablen 
15.
for /F "tokens=3 delims=;" %%L IN ("%LINE%") DO set "SOURCE=%%L" 
16.
:: Name der Dummydatei zur Auswahl des Ziellaufwerks 
17.
for /F "tokens=4 delims=;" %%M IN ("%LINE%") DO set "DUMMY=%%M" 
18.
:: Einzelne Datei, optional 
19.
for /F "tokens=5 delims=;" %%N IN ("%LINE%") DO set "FILE=%%N" 
20.
 
21.
[...] 
22.
 
23.
goto :eof
Soweit, sogut. Funktioniert alles.


Das Problem ist jetzt allerdings, dass ich in der csv Datei zwingend Variablen angeben/übergeben muss, um das Programm variabel zu halten.

Eine Beispielzeile aus der csv Datei:

Benutzer;Sicherung\Benutzer;%USERPROFILE%;Dummy.csr;

Nachdem die Funktion :Start die Variablen ausgelesen hat, interpretiert der 3. Token den Wert für %SOURCE% direkt als %USERPROFILE% und nicht, wie benötigt, als C:\User\[Benutzername]



Ich hoffe, es ist einigermaßen verständlich, wo das Problem liegt und mir kann jemand helfen.

[Edit Biber] Codeformatierung [/Edit]
Mitglied: bastla
27.08.2010, aktualisiert 24.07.2012
Hallo ForgottenRealm!

Versuch es mit
call set "SOURCE=%%L"
Abgesehen davon genügt eigentlich eine "for"-Schleife:
01.
for /F "tokens=1-5 delims=;" %%J IN ("%LINE%") DO ( 
02.
    REM Sicherungsname 
03.
    call set "JOBNAME=%%J" 
04.
    REM Zielordner ohne Laufwerksangabe 
05.
    call set "TARGETPATH=%%K" 
06.
    REM Quellordner ohne Umgebungsvariablen 
07.
    call set "SOURCE=%%L" 
08.
    REM Name der Dummydatei zur Auswahl des Ziellaufwerks 
09.
    call set "DUMMY=%%M" 
10.
    REM Einzelne Datei, optional 
11.
    call set "FILE=%%N" 
12.
13.
echo %JOBNAME%_%TARGETPATH%_%SOURCE%_%DUMMY%_%FILE%
Etwas kompakter ließe sich das auch so schreiben:
01.
for /F "tokens=1-5 delims=;" %%J IN ("%LINE%") DO ( 
02.
    call set "JOBNAME=%%J"     & REM Sicherungsname 
03.
    call set "TARGETPATH=%%K"  & REM Zielordner ohne Laufwerksangabe 
04.
    call set "SOURCE=%%L"      & REM Quellordner ohne Umgebungsvariablen 
05.
    call set "DUMMY=%%M"       & REM Name der Dummydatei zur Auswahl des Ziellaufwerks 
06.
    call set "FILE=%%N"        & REM Einzelne Datei, optional 
07.
08.
echo %JOBNAME%_%TARGETPATH%_%SOURCE%_%DUMMY%_%FILE%
Grüße
bastla

P.S.: Findest Du nicht auch, dass als Code formatierte Batches zumindest schon mal besser aussehen?
Bitte warten ..
Mitglied: ForgottenRealm
27.08.2010 um 22:49 Uhr
Hallo bastla

War mir eigentlich klar, dass DU mir wieder helfen kannst

Auf die Idee mit dem Call set wäre ich im Leben nicht gekommen, vielen Dank!

Das mit in For schleifen mit Tokens die %% Variablen automatisch fortgeführt werden, wusste ich ebenfalls noch nicht - gut zu Wissen, spart mir viel Arbeit.


Und auch was die Formatierung angeht muss ich dir Recht geben, allerdings vergesse ich jedes mal, den Code als Code zu formatieren ...


Also noch einmal, viele Dank für die schnelle Hilfe!
Bitte warten ..
Mitglied: bastla
27.08.2010 um 22:56 Uhr
Hallo ForgottenRealm!

Na ja, ich war zufällig gerade da ...

Freut mich jedenfalls, wenn Du etwas mitnehmen kannst.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Laufwerksbezeichnung (label) in Batch als Variable nutzen (6)

Frage von tobias.mock zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable per Batch auslesen und in Registry schreiben (1)

Frage von Zendara zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: CPU-Auslastung eines Prozesses auslesen und als Variable definieren (3)

Frage von tralveller zum Thema Batch & Shell ...

Batch & Shell
gelöst In einer Batch variable die Datei extension ermitteln ? (4)

Frage von Kriegstreiber zum Thema Batch & Shell ...

Neue Wissensbeiträge
Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
VPN Tunnel aufbauen (16)

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

Router & Routing
ASUS RT-N18U mit VPN Client hinter Fritzbox - Portforwarding (14)

Frage von marshall75000 zum Thema Router & Routing ...

Microsoft Office
Saubere HTML aus Word-Dokument (13)

Frage von peterpa zum Thema Microsoft Office ...

E-Mail
gelöst Probleme beim E-Mail Empfang (12)

Frage von TommyB83 zum Thema E-Mail ...