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

Frage Entwicklung Batch & Shell

Mitglied: Fusseler

Fusseler (Level 1) - Jetzt verbinden

04.08.2006, aktualisiert 07.08.2006, 15121 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 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
Per Batch Zahlenfolge kürzen bzw. Bearbeiten
gelöst Frage von zensbertBatch & Shell3 Kommentare

Hallo, Ich lese mittels Batch einen Registry-Wert aus Je nach PC unterscheidet sich aber die Semantik, die Zahlenfolgen sind ...

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
Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 2 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 4 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 7 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 13 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
Frage von Winfried-HHBatch & Shell15 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...