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, 4911 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Variable setzten mit Leerzeichen (3)

Frage von Marlon1 zum Thema Batch & Shell ...

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

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

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...