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 setlocal enableDelayedExpansion/disableDelayedExpansion-Wechsel

Mitglied: BatzJunior

BatzJunior (Level 1) - Jetzt verbinden

20.12.2006, aktualisiert 21.12.2006, 10834 Aufrufe, 9 Kommentare

Hallo @ alle,

ich stehe vor dem Problem, dass ich für eine Operation "enableDelayedExpansion" brauche, dieses jedoch an einer anderen Stelle stört. Eine Variable, die ich aus einem File auslese beinhaltet nämlich Ausrufezeichen, welche samt nachstehendem Text einfach "rausgeschmissen" werden. Ein Wechsel zwischen enableDelayedExpasnion und DisableDelayedExpansion ist aber auch nicht so einfach möglich, da dabei entweder der Wert, wofür ich enable... brauche, aufgrund des endlocal nicht mehr verfügbar ist oder aber der Wert aus dem File beschnitten wird. Gibt es eine Möglichkeit, auf den Wert auch nach dem endlocal noch zuzugreifen?

Vielen Dank!

Daniel
Mitglied: Biber
20.12.2006 um 16:41 Uhr
Moin BatzJunior,

wäre eventuell besser erklärbar an einem kleine Codefetzen....

Magst Du mal ein Fragment mit dem relevanten Problem posten?

Danke
Biber
Bitte warten ..
Mitglied: BatzJunior
20.12.2006 um 17:11 Uhr
OK, also:

Zum Anfang lese ich die XML-Datei zeilenweise aus und belege die Variable 'wert' je nach Inhalt entsprechend fester Feldlängen mit Leerzeichen:

for /f "delims=>< tokens=1,2" %%f IN (%1) DO CALL :loop %%f "%%g"

:loop
set wert1=%1
set wert2=%2
IF (%wert1%)==(Satzart) set "zeichenfolge=%wert2:~1,-1%" & goto :writeTemp
IF "%wert1%"=="Belegnummer" set "wert= " & goto :beginn
IF "%wert1%"=="Kundennummer" set "wert= " & goto :beginn
::.....
set "wert="

:beginn
if (%wert1:~-3%)==(xml) goto :eof
if (%wert1:~0,1%)==(/) echo Schluss & goto :writeFinal
if (%wert2%)==("Daten") goto :eof
if (%wert2%)==("") set wortlaenge=0 & goto :auffuellen
if (%wert2:~0,2%^")==(""^") goto :laengenbestimmung ::Ueberspringen der naechsten Ueberpruefung
if (%wert2:~1,1%)==(/) set wortlaenge=0 & goto :auffuellen

:laengenbestimmung
::Ersetzung einiger Sonderzeichen/Sonderfaelle
set werte=%wert2%
set werte=%werte:Ö=OE%
set werte=%werte:Ü=UE%
::....
::Laengenbestimmung des Strings
(echo %werte%>x) & for %%i in (x) do @set /a wortlaenge=%%~zi-2
::abzueglich der beiden Leerzeichen vorne und hinten
set /a wortlaenge=%wortlaenge%-2


:auffuellen
if %wortlaenge%==0 set "zeichenfolge=%wert%" & goto :writeTemp
::Abschneiden der Gänsefuesschen
set zeichenfolge=%werte:~1,-1%
::Hier die Stelle, bei der ich enableDelayedExpansion brauche
::%wert% wird um die Länge des Strings minimiert
set wert=!wert:~0,-%wortlaenge%!
::für 'zeichenfolge' allerdings schon nicht mehr, da innerhalb derer die besagten '!' vorkommen
::Zusammenfuegen von %zeichenfolge% und der übriggebliebenen Leerzeichen von %wert%
set zeichenfolge=%zeichenfolge%%wert%

:writeTemp
Set "Zeile=%Zeile%%zeichenfolge%"
goto :eof

:writeFinal
if "%wert1%"=="/Kopf" echo %Zeile%>>dates.txt & set Zeile=& goto :eof
if "%wert1%"=="/Position" echo %Zeile%>>dates.txt & set Zeile=& goto :eof
goto :eof

Vielen Dank!

Daniel
Bitte warten ..
Mitglied: Biber
20.12.2006 um 17:18 Uhr
Moin BatzJunior,

Skizze:

01.
... 
02.
:auffuellen 
03.
if %wortlaenge%==0 set "zeichenfolge=%wert%" & goto :writeTemp 
04.
::Abschneiden der Gänsefuesschen 
05.
set zeichenfolge=%werte:~1,-1% 
06.
::Hier die Stelle, bei der ich enableDelayedExpansion brauche 
07.
::%wert% wird um die Länge des Strings minimiert 
08.
<b>Setlocal enableDelayedExpansion 
09.
set wertInnen=!wert:~0,-%wortlaenge%! 
10.
endlocal & set "wert=%wertInnen%" 
11.
</b> 
12.
::für 'zeichenfolge' allerdings schon nicht mehr, da innerhalb derer die besagten '!' vorkommen 
13.
::Zusammenfuegen von %zeichenfolge% und der übriggebliebenen Leerzeichen von %wert% 
14.
<b>REM Ggf explizites "Setlocal DisableDelayedExpansion</b> 
15.
set zeichenfolge=%zeichenfolge%%wert% 
16.
 
17.
.....
[Ungetestete Skizze]

Gruß Biber
Bitte warten ..
Mitglied: miniversum
20.12.2006 um 19:47 Uhr
set wert=!wert:~0,-%wortlaenge%!
Brauchst du das enableDelayedExpansion überhaubt??

miniversum
Bitte warten ..
Mitglied: BatzJunior
20.12.2006 um 21:11 Uhr
..leider ja, denn sonst wird %wortlaenge% nicht ausgewertet bevor die Zuweisung für %wert% geschieht...

Gruß, Daniel
Bitte warten ..
Mitglied: BatzJunior
20.12.2006 um 21:39 Uhr
Hi Biber,

leider funktioniert Deine Variante nicht Noch irgend eine andere Idee?

Danke, Daniel
Bitte warten ..
Mitglied: miniversum
20.12.2006 um 21:57 Uhr
Idee:
Schreib wert in ne Datei, mach dann dein endlocal und ließ danach wert wieder ein.
Doofer Umweg aber geht.

mniversum
Bitte warten ..
Mitglied: Biber
21.12.2006 um 00:50 Uhr
Moin BatzJunior,
Noch irgend eine andere Idee?

Kennst Du jemanden in diesem Forum, der sich daran erinnern kann, dass mir mal Ideen ausgegangen wären?

Wenn die DelayedExpansion bei Dir unter Umständen Probleme macht ( z.B. wegen Ausrufungszeichen im String), dann meide sie doch ganz.
Lässt sich ja immer selbst nachbilden.
Wenn ich es richtig verstanden habe und die Soll-Länge auf jeden Fall kürzer oder gleich der momentanen Länge des Strings ist, dann reicht doch folgendes:

01.
:: ----snipp CutItDemo.bat 
02.
@echo off & setlocal 
03.
Set /a wortlaenge=8 
04.
set "Wert=whateverUwant"  
05.
 
06.
call:cutit wert "%%wert:~0,%wortlaenge%%%" 
07.
echo Wert[%wert%] 
08.
goto :eof 
09.
 
10.
:cutit 
11.
Set "%1=%~2 
12.
goto :eof
Demo: der %Wert% "whateverUwant" wird auf 8 Zeichen gekürzt.
01.
>f:\administrator\CutItDemo.bat 
02.
Wert[whatever]

Oder, falls jemand eine Batch-Funktion Left.bat braucht:
01.
------- snipp Left.bat Parameter 1=String;  Parameter 2= Soll-Länge 
02.
@echo off & setlocal 
03.
set "Wert=%1"  
04.
call:cutit wert "%%wert:~0,%2%%" 
05.
echo Left(%1, %2)=[%wert%] 
06.
goto :eof 
07.
 
08.
:cutit 
09.
Set "%1=%~2 
10.
goto :eof
Demo:
01.
>f:\administrator\Left.bat LangerTestText 8 
02.
Left(LangerTestText, 8)=[LangerTe]
HTH Biber
Bitte warten ..
Mitglied: BatzJunior
21.12.2006 um 09:55 Uhr
Hallo Biber,

perfekt, es hat super funktioniert!
Vielen, vielen, lieben Dank! Durch Dich und Deine Hinweise habe ich viel dazugelernt!

Ich wünsche Dir und auch allen anderen Usern ein frohes, besinnliches Weihnachtsfest!

Liebe Grüße,

Daniel
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Setlocal enabledelayedexpansion und Sonderzeichen (z.B. !-Zeichen)

Frage von adm2015Batch & Shell2 Kommentare

Hallo Zusammen, ich bin mir sicher, dass dieses Thema schon öfters angesprochen wurde. Leider finde ich hierzu aber nichts. ...

Utilities

Automatisch Webseiten im Wechsel anzeigen

gelöst Frage von DeepThoughtUtilities2 Kommentare

Hallo, nachdem der Versuch mit Android gescheitert ist, muss ich nun mehrere Google-Analytics Webseiten im Wechsel auf einem Windows7 ...

Windows 8

Autom. task wechsel

Frage von markus.pixnerWindows 85 Kommentare

Hallo Administratoren, Ich habe seit kurzen ein neues acer notebook für die arbeit bekommen, windows 8.1 ist installiert. Meistens ...

LAN, WAN, Wireless

WLAN Accesspoints automatischer Wechsel

gelöst Frage von PharITLAN, WAN, Wireless8 Kommentare

Hallo allerseits, ich würde gerne bei uns über mehrere Etagen AccessPoints aufrichten. Allerdings bleiben speziell die Smartphones beim Etagenwechsel ...

Neue Wissensbeiträge
E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 1 TagE-Mail7 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 1 TagHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 1 TagSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Server-Hardware

Lösung für Ersatz eines defekter Raid-Controllers

Anleitung von wellknown vor 2 TagenServer-Hardware4 Kommentare

Hallo, da ich nichts gefunden habe und selbst eine Lösung brauchte, hier eine kleine Anleitung für alle die vor ...

Heiß diskutierte Inhalte
Windows Server
Mit der alten Domäneprofil anmelden ohne Server
gelöst Frage von SyosseWindows Server37 Kommentare

Hallo Jungs Folgendes Szenario: Ich habe bei einem sehr kleinen Unternehmen (2Personen) den Server migriert, soweit hat alles geklappt. ...

Sicherheits-Tools
Virenprogramm lässt Programme nicht starten
Frage von SurferGirlSicherheits-Tools23 Kommentare

Hallo, ich bin neu hier, ich hoffe ich habe die richtige Rubrik gewählt. Falls nicht, tut es mir leid. ...

Windows Server
SQL Server Instanz (Eplan) auf WIN 2008 RC2 Server frisst RAM ohne Limit
Frage von derinderinderinWindows Server17 Kommentare

Hallo Zusammen, Wir haben hier einen Windows 2008 RC2 Server. Darauf läuft ein SQL Server Express 2014 Version 12.0.4232.0. ...

Windows 10
Best Practice für Schulungsräume
Frage von Sn0wFoxWindows 1016 Kommentare

Hallo, leider bin ich auch nach langer Suche nicht auf eine zufriedenstellende Nicht-Cloud-Lösung gestoßen und wollte mal Fragen ob ...