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
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, 4965 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
Teil eines Strings als Variable setzen
gelöst Frage von tHe-jAyBatch & Shell2 Kommentare

Hallo, für ein kleines Batch-Script benötige ich einen Servicenamen als Variable. Den Servicenamen frage ich über folgenden Befehl ab: ...

Perl
In Textdatei nach String suchen und diesen als Variable weiterverarbeiten
gelöst Frage von hokoPerl4 Kommentare

Hallo, Ich möchte in einem Pelrscript eine Textdatei nach einem String durchsuchen und diesen dann weiterverarbeiten. Der zu suchende ...

Batch & Shell
Batch - Variablen
gelöst Frage von Marlon1Batch & Shell2 Kommentare

Hallo, Ich habe eine Frage zu Variablen. Und zwar ob es irgendwie geht das Batch mit ein IF Befehl ...

Java
Java String Variable in printf ausgeben
gelöst Frage von MarabuntaJava1 Kommentar

hallo, wie kriege ich in einem Einzeiler ohne "+" die Ausgabe von String-Variablen hin? danke.

Neue Wissensbeiträge
Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 47 MinutenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

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

Information von Penny.Cilin vor 3 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 ...

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