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 Variableninhalt im DOS-Batch kürzen

Mitglied: Fusseler

Fusseler (Level 1) - Jetzt verbinden

04.08.2006, aktualisiert 07.08.2006, 15300 Aufrufe, 10 Kommentare

Guten Tag!,
ich habe da beim DOS-Batch ein kleines Problem...
Das Batch bekommt eine Variable %5 durch ein anderes Programm übergeben (dort kann ich leider nicht eingreifen, das mal vorneweg);
diese Variable enthält einen Pfad, der ebenfalls inhaltlich nie gleich ist.
Jetzt wird leider ein " vor und hinter der Pfadangabe mitgeliefert, sodass ich diesen nicht für weitere Funktionen nutzen kann.

Ich versuche, beherrsche aber einfach nicht den set-Befehl von DOS, um die Variable in eine ohne "..." umzubasteln. Aber - es klappt einfach nicht!

Das Anführungszeichen steht immer am Anfang und Ende der Variablen; der Inhalt ist nicht identisch und hat leider auch eine unterschiedliche Länge.

Könnte mir jemand nen Tipp geben?

Vielen Dank!
Mitglied: Biber
04.08.2006 um 11:08 Uhr
Moin Fusseler,

falls es ein Batch diesseits von Win95/98/ME ist:

01.
::----snipp HandleInputParmsDemo.bat 
02.
@Echo InParams [1:[%1] [2:[%2]] [3:[%3] 
03.
@Echo Behandelte InParams: [1:[[%~1] [2:[%~2]] [3:[%~3] 
04.
::----snapp HandleInputParmsDemo.bat
Demo:

01.
(=11:05:32  D:\temp=) 
02.
>HandleInputParmsDemo.bat eins zwei "%userprofile%" 
03.
InParams [1:[eins] [2:[zwei]] [3:["C:\Dokumente und Einstellungen\Biber"] 
04.
Behandelte InParams: [1:[[eins] [2:[zwei]] [3:[C:\Dokumente und Einstellungen\Biber] 
05.
(=11:05:46  D:\temp=)
HTH
Biber
Bitte warten ..
Mitglied: Fusseler
04.08.2006 um 11:28 Uhr
Uff. Danke für die schnelle Antwort. Ist übrigens ein 2003-Srv., ist das in diesem Fall nicht unwichtig?
Bitte nicht bös sein - aber ich verstehe die Parameterbehandlung leider nicht - könntest Du das mal kurz kommentieren? Dann würde es mir leichter fallen, die Übertragung auf meine Anwendung vornzunehmen...

Nochmal - besten Dank!

-Fusseler
Bitte warten ..
Mitglied: Biber
04.08.2006 um 11:46 Uhr
Also, Fusseler,

kurz kommentiert:
1)
bitte angewöhnen: DOS-Prompt, DOS-Variablen, DOS-Batch gibt es noch bis inclusive Win95/98/ME. Da hieß den Command-Interpreter noch COMMAND.com wie auch vorher ab DOS 2.0.
Seit Win NT; spätestens aber seit Win2000 gibt es alternativ und als Default die CMD.exe als "Eingabeaufforderung" oder oder "Kommandozeile" oder Shell.
Entsprechend dann die CMD-Variablen etc.

2) Für die CMD.exe sind die Funktionalitäten massiv erweitert worden- und M$ hat öffentlich bekundet, dass wohl doch nicht alles über Klicki-Bunti-GUI abzufackeln ist, speziell beim administrativen Tagesgeschäft.
Bei diesem Vista-Geraffel soll das Ganze mit der Monad-Shell noch einmal einen qualitativen Quantensprung erleben.
[Wenn denn Vista jemals kommt.... *lach*]

3) Was CMD-Variablen angeht, gibt es z.B. bei Eingabe von "SET /?" oder "FOR /?"oder "CMD /?" oder "CALL /?" am CMD-Prompt eine ellenlange und gute (=nicht von M$-Übersetzungsprogrammen generierte) Hilfe.

In den letzten 30 Zeilen der FOR/?-Hilfe steht zum Beispiel:
01.
Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert. 
02.
Sie können jetzt folgende Syntax verwenden: 
03.
 
04.
    %~I         - Expandiert %I und entfernt alle umschließenden 
05.
                  Anführungszeichen ("). 
06.
....
Ähnliches steht bei CALL /? bezogen auf die Parameter %1....%9
Diese Syntax habe ich oben angewendet.

Thats all.
Gruß
Biber
Bitte warten ..
Mitglied: Fusseler
04.08.2006 um 13:49 Uhr
Hallo Biber,

erstmal - besten Dank! Ich arbeite an meiner Syntax, versprochen!

Ich hätte da jetzt mal jetzt folgenden Batch konstruiert:

@echo off
:: setze umgebungsvariable zum test ::
set "j="c:\temp\datei.txt""

::
echo %j%
echo %~j%

:: öffne die datei und lese aus ::

for "tokens=" %%i in (%~j%) do set "lfdnr=%%i"

:: schreibe die ausgelesen sätze in die datei versand1.txt ::

if exist protokoll.chk echo >> versand1.txt
if exist protokoll.chk echo %lfdnr% >> versand1.txt

Ausgabe:

j="c:\temp\datei.txt" ::soweit ok ::
Die folgende verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig: %~j%) do set "lfdnr=%%i"

Übrigens - anstatt %~j% habe ich %%~j% und %~j versucht... kein Erfolg.

An welcher Stelle ist mein Fehler?
Besten Dank und Gruss,
Fusseler
Bitte warten ..
Mitglied: Biber
04.08.2006 um 14:06 Uhr
Moin Fusseler,

set "j="c:\temp\datei.txt""
hier oben reicht lt. M$-Hilfe auch ein
set j=c:\temp\datei.txt
...was ich immer vermeide, weil sich da möglicherweise ein trailing blank einschleicht.
Ich empfehle immer:
set "j=c:\temp\datei.txt" -->wenn die Variable NICHT in Anführungszeichen sein soll
set j="c:\temp\datei.txt" --> wenn die Variable in Anführungszeichen sein soll

Ich gehe mal bei Dir von einer Variablen in Anführungszeichen aus: [set j="c:\temp\datei.txt" ]
for "tokens=" %%i in (%~j%) do set "lfdnr=%%i"
Hier ist "nur" die Klausel "tokens=" der Fehler.
Diese Klausel gibt es nicht bei einer "reinen" FOR..IN..DO-Anweisung, weil ja bei einen "reinen" FOR..IN..DO..-Anweisung immer eine Aufzählung in der Klammer steht.
In Deinem Fall besteht zwar diese Aufzählung nur aus einem Element ("C:\temp\datei.txt").
Bleibt aber trotzdem eine Aufzählung, für die keine "tokens" oder "Delims" angegeben werden können.

Gruss
Biber
Bitte warten ..
Mitglied: Fusseler
04.08.2006 um 14:24 Uhr
Heydo Biber,

nochmals ich...

also:
set "j="c:\temp\datei.txt"" --> die reine Definition [set j="c:\temp\datei.txt"] habe ich aus Gründen der M$-Recommandation genutzt - und sie liefert den Pfad in der gleichen Form, wie der Parameter beim Batch ankommt: Mit Anführungszeichen.


Als token hatte ich übrigens "tokens=3,24-33" definiert, was direkt aus dem Prompt und mit fixem Pfad in der For-Schleife einwandfrei den Wert liefert, der eben geliefert werden soll...
Problem scheint mir doch eher zu sein, dass ich die Syntax der Variablen immer noch nicht richtig setze - eben (%~j%) ... und deswegen der Pfadoperator als falsch interpretiert wird.

Oder? Mir 8-)

Besten Dank für Deinen Support!,
Fusseler
Bitte warten ..
Mitglied: Biber
04.08.2006 um 14:34 Uhr
Nein, nein, Fusseler...
(leider bin ich kein guter Erklärer, sorry):

Beispiel am Prompt:
01.
>for %i in (%j%) do @echo [unbehandelt:] %i ...ohne Anführungszeichen: [%~i] 
02.
[unbehandelt:] "c:\test\datei.xyz" ...ohne Anführungszeichen: [c:\test\datei.xyz]
Bei einer Variablen %j%, %test% oder %userprofile% kannst Du diese Tilde-Syntax nicht verwenden.
Nur bei dynamischen Variablen, d.h. Zählvariablen einer FOR..IN..DO-Anweisung oder den Inputparametern eines Batches/eines geCALLten Blocks.

Siehe oben - eine Tilde auf die "echte", gesetzte Variable %j% ist wirkungslos.
Eine Tilde bei der Zählvariablen %i funktioniert.

Das Beispiel von oben als Batch mit zwei Prozentzeichen vor den Zählvariablen:
01.
>for %%i in (%j%) do @echo [unbehandelt:] %%i ...ohne Anführungszeichen: [%%~i] 
02.
[unbehandelt:] "c:\test\datei.xyz" ...ohne Anführungszeichen: [c:\test\datei.xyz]
Besser?
Biber
Bitte warten ..
Mitglied: Fusseler
04.08.2006 um 15:17 Uhr
Hey Biber,
Danke für Deine Geduld - scripten war mir schon immer zuwider...

Also, ich glaube das richtige Ergebnis müsste das hier sein:
01.
@echo off 
02.
:: setze umgebungsvariable zum test :: 
03.
set "k="ichbinderpfad"" 
04.
echo %k% :: anzeige des pfads auf cmd-ebene  - kontrolle :: 
05.
for %%i in (%k%) do @echo %%~i :: zur kontrolle, ohne Anführungszeichen :: 
06.
for %%i in (%k%) do set "datei=%%~i" :: setzen der variablen "datei" mit datei + pfad ohne anführungszeichen :: 
07.
echo %datei% :: pfad anzeigen, nur für diesen test:: 
08.
 
09.
:: öffne die datei und lese aus :: 
10.
 
11.
for /F "tokens=3,24-33" %%i in (%datei%.x) do set "lfdnr=%%i" :: öffne die datei + extension und lese aus :: 
12.
 
13.
:: schreibe die ausgelesen sätze in die datei versand1.txt :: 
14.
 
15.
if exist protokoll.chk echo %lfdnr% >> versand1.txt 
16.
print /d:lpt2 versand1.txt :: drucke die erstellte datei ::
Im einzelnen Batch hat´s funktioniert - ich atme durch, wenn´s jetzt im Realfall klappt (der leider auf einem Event basiert, den ich nicht steuern kann...)


Falls ich den Thread danach schließen kann:

Danke für Deine Geduld!!!
Fusseler
Bitte warten ..
Mitglied: Fusseler
07.08.2006 um 11:28 Uhr
Also - wunderbar! Der Batchlauf funktioniert reibungslos!

Thread geschlossen, vielen Dank nochmal!
Bitte warten ..
Mitglied: Biber
07.08.2006 um 11:45 Uhr
Moin Fusseler,

freut mich.
Schließe diesen Thread mit Status "Gelöst".

Weiterhin stressarmen Wochenbeginn
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch mehrmals durchlaufen, immer mit anderem Variableninhalt

gelöst Frage von Winfried-HHBatch & Shell2 Kommentare

Hallo in die Runde! Wie kann ich eine Batch mehrfach durchlaufen, und zwar mit einer Parameterliste. Soll heißen: Parameterliste: ...

Batch & Shell

Batch kürzen, übersichtlicher machen

Frage von yazendBatch & Shell2 Kommentare

Guten Morgen zusammen, kann hier mal jemand "rüber schauen" da meine BATCH Kenntnisse nicht dafür ausreichen um diese eventuell ...

Batch & Shell

In Batch FINDSTR in Variable und auch noch kuerzen

gelöst Frage von deathwormBatch & Shell2 Kommentare

Hallo! Ich habe folgendes Problem. Beim verschluesseln von Festplatten wird ein Key generiert und dieser in eine TXT Datei ...

Batch & Shell

DOS-BATCH erkennt den Befehl "FIND c" nicht

Frage von yousaintBatch & Shell10 Kommentare

Hallo zusammen würde gerne den Befehl FIND /c unter DOS verwenden um die Zeilenanzahl aus einer PiPE zu erhalten. ...

Neue Wissensbeiträge
Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 1 TagHumor (lol)4 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 1 TagExchange Server6 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 2 TagenErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Vmware
VMware Updates gegen L1 Lücke
Information von sabines vor 3 TagenVmware

Für die Vmware Produkte vCenter Server, ESXi, Workstation und Fusion stehe Updates bereit um die L1 Lücke zu schließen. ...

Heiß diskutierte Inhalte
Netzwerke
Netzwerk-Architektur mit VLANs
Frage von niLuxxNetzwerke21 Kommentare

Liebe Community, Ich hätte eine kurze Frage an euch. Ich werde in Kürze das Netzwerk unserer (sehr) kleinen Firma ...

Webbrowser
Neuer Tab Firefox
gelöst Frage von BleifussWebbrowser12 Kommentare

Hallo, via Strg + T öffnet man ja einen neuen Tab. Gibt es die Möglichkeit, dass der Tab sich ...

Windows Server
WSUS nach Upgrade - kein Start mehr
gelöst Frage von Ghost108Windows Server9 Kommentare

Hallo zusammen, habe einen Windows Server 2012 welcher als WSUS dienst. Jetzt wurde ein Upgrade auf Server 2016 durchgeführt ...

Microsoft
Ist es möglich ein reines Volume C Datenbackup in eine Hyper-V VM zu konvertieren?
Frage von Frank84Microsoft8 Kommentare

Hallo zusammen, ich habe hier ein Backup vorliegen, das ausschließlich das komplette C:\ Volume eines physischen Server 2012 enthält. ...