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

Batch Dateipfad mit Leerzeichen als einen Parameter mit anderen Parametern an call Sprungmarke übergeben und mit FOR-Schleife verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: Progfreund

Progfreund (Level 1) - Jetzt verbinden

04.07.2011, aktualisiert 05.07.2011, 3083 Aufrufe, 5 Kommentare

Hallo.
Ich suche nach einer Lösung, um Leerzeichen im Pfad im Script unten
eingeben zu können, ohne dass die Ziel.txt mit halbem Namen oder ohne
Inhalt erstellt wird.


Code:
01.
@echo off 
02.
setlocal EnableDelayedExpansion 
03.
 
04.
set /p "varSpeicherpfad=Bitte geben Sie einen Speicherpfad ein: " 
05.
set /p "varSpeichername=Bitte geben Sie einen Speichernamen ein: " 
06.
call :DoppelteAusgabe "!varSpeicherpfad!"\"!varSpeichername!".txt echo. 
07.
call :DoppelteAusgabe "!varSpeicherpfad!"\"!varSpeichername!".txt echo Test. 
08.
goto :Ende 
09.
 
10.
:DoppelteAusgabe 
11.
REM in der zweiten FOR-Schleife: %%b=Parameterzeile abzüglich %1 
12.
for /F "tokens=1*" %%a in ("%*") do ( 
13.
for /F "tokens=1* delims=:" %%x in ('^(%%b^) 2^>^&1 ^| findstr /n $') do (echo.%%y)>>%1&echo.%%y 
14.
15.
exit /b 0 
16.
 
17.
:Ende 
18.
echo. 
19.
echo Hier ist Ende. 
20.
endlocal 
21.
pause
Wenn ein Dateiname für !varSpeichername!.txt eingegeben ist, wird die Funktion :DoppelteAusgabe
aufgerufen, die echo. und echo Test. in die !varSpeichername!.txt speichert und am Bildschirm
ausgibt.

Das Problem ist, dass der übergebene Parameter trotz Leerzeichen bei Verarbeitung an der Stelle
der vorhandenen Leerzeichen geteilt wird.

Würde mich über Tipps freuen.
LG
Mitglied: bastla
04.07.2011 um 21:47 Uhr
Hallo Progfreund!

Der tiefere Sinn der ganzen Aktion ist mir zwar noch nicht klar (schließlich könntest Du den Zieldateipfad ja bereits vor der Schleife in einer Variablen zusammensetzen und müsstest ihn dann gar nicht als Parameter übergeben), aber im Zweifelsfall würde ich mich nicht auf das Leerzeichen als Trennzeichen versteifen, sondern das etwa so versuchen:
01.
@echo off 
02.
setlocal EnableDelayedExpansion 
03.
set "Delim=§" 
04.
 
05.
set /p "varSpeicherpfad=Bitte geben Sie einen Speicherpfad ein: " 
06.
set /p "varSpeichername=Bitte geben Sie einen Speichernamen ein: " 
07.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%Delim%echo. 
08.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%Delim%echo Test. 
09.
goto :Ende 
10.
 
11.
:DoppelteAusgabe 
12.
REM in der zweiten FOR-Schleife: %%b=Parameterzeile abzüglich %1 
13.
for /F "tokens=1* delims=%Delim%" %%a in ("%*") do ( 
14.
    for /F "tokens=1* delims=:" %%x in ('^(%%b^) 2^>^&1 ^| findstr /n $') do (echo.%%y)>>%%a&echo.%%y 
15.
16.
exit /b 0 
17.
 
18.
:Ende 
19.
echo. 
20.
echo Hier ist Ende. 
21.
endlocal 
22.
pause
Anstelle der Variablen %Delim% kannst Du natürlich auch einen konstanten Wert eintragen, und es muss auch nicht "§" sein, sondern nur ein Zeichen, das im Dateinamen und im Ausgabetext nicht vorkommt - "optisch" wäre zB "_" auch ganz nett ...

Grüße
bastla
Bitte warten ..
Mitglied: Progfreund
05.07.2011 um 17:48 Uhr
Hallo, bastla.
Danke, dein Code funktioniert.

Die Ausgabe in der .txt Datei hat nach jeder geschriebenen
Zeile sowie bei jeder Leerzeile durch echo. ein zusätzliches Zeichen:
Wie kommt es zu dieser Zeichensetzung und wie kann ich das Zeichen
als Ascii Code ermitteln und rausfiltern?
Bitte warten ..
Mitglied: bastla
05.07.2011 um 19:57 Uhr
Hallo Progfreund!

"Das" Zeichen sind "die" Windows-Standardzeichen für das Zeilenende Chr(13) und Chr(10) ...

Ermitteln lassen sich solche und andere in einer Datei enthaltene Zeichen (soferne das der von Dir verwendete Text-Editor nicht ohnehin unterstützt) unter Verwendung eines Hex-Editors (wie zB Tiny Hexer) oder mit zB VBScript, welches ich auch für das "Rausfiltern" von unter Batch eher unhandlichen Sonderzeichen verwenden würde.

Grüße
bastla
Bitte warten ..
Mitglied: Progfreund
06.07.2011 um 11:17 Uhr
Ich möchte die beim call Aufruf als Parameter übergebenen echo [Text] als Variablen setzen.
Dann sollen durch den Aufruf call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable1%"
die übergebenen Parameter Verzeichnis, Verzeichnisname und echo [Text] verarbeitet werden.

Das Problem: die Ausgabe gibt für alle 18 Code Zeilen Fehler wieder:

  • Der Befehl " " ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
... (weitere ausgelassen)
  • Der Befehl "Eingegebenes" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
... (weitere ausgelassen)
  • Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.

Wer kennt die Ursache?


01.
:DatumAusgabeVariablenSetzen 
02.
set "varDatumAusgabeVariable1=." 
03.
set "varDatumAusgabeVariable2= Eingegebenes Datum:  "!varDatum!"" 
04.
set "varDatumAusgabeVariable3= Formatiertes Datum:   "!varDatumTageszahl!.!varDatumMonatszahl!.!varDatumJahrhundertszahl!!varDatumJahreszahl!"" 
05.
set "varDatumAusgabeVariable4= Reste von" 
06.
set "varDatumAusgabeVariable5=     Tag:                          "!varTagesRest!"" 
07.
set "varDatumAusgabeVariable6=     Monat:                      "!varMonatsRest!"" 
08.
set "varDatumAusgabeVariable7=     Jahrhundert:             "!varJahrhundertsRest!"" 
09.
set "varDatumAusgabeVariable8=     Jahr:                         "!varJahresRest!"" 
10.
set "varDatumAusgabeVariable9=." 
11.
set "varDatumAusgabeVariable10= Schaltjahr:                    "!varSchaltjahr!"" 
12.
set "varDatumAusgabeVariable11= Schaltjahrsrelevanz:     "!varSchaltjahrsMoeglichkeit!"" 
13.
set "varDatumAusgabeVariable12= Schaltjahrparameter:   "!varSchaltjahrparameter!"" 
14.
set "varDatumAusgabeVariable13= Summanden:                 "!varTagesRest!+!varMonatsRest!+!varJahrhundertsRest!+!varJahresRest!+!varSchaltjahrparameter!"" 
15.
set "varDatumAusgabeVariable14= Summe:                         "!varWochentagsRest1!"" 
16.
set "varDatumAusgabeVariable15= Rest der Summe:          "!varWochentagsRest2!"" 
17.
set "varDatumAusgabeVariable16= Wochentag:                  "!varWochentag!"" 
18.
set "varDatumAusgabeVariable17=." 
19.
set "varDatumAusgabeVariable18=." 
20.
 
21.
:Speichern 
22.
set "varDelim=_" 
23.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable1%" 
24.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable2%" 
25.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable3%" 
26.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable4%" 
27.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable5%" 
28.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable6%" 
29.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable7%" 
30.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable8%" 
31.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable9%" 
32.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable10%" 
33.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable11%" 
34.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable12%" 
35.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable13%" 
36.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable14%" 
37.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable15%" 
38.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable16%" 
39.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable17%" 
40.
call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable18%" 
41.
goto :AusgabeUndAbfrage 
42.
 
43.
:DoppelteAusgabe 
44.
REM in der zweiten FOR-Schleife: %%b=Parameterzeile abzüglich %1 
45.
for /F "tokens=1* delims=%varDelim%" %%a in ("%*") do ( 
46.
for /F "tokens=1* delims=:" %%x in ('^(%%b^) 2^>^&1 ^| findstr /n $') do (echo%%y)>>%%a&echo%%y) 
47.
exit /b 0
Bitte warten ..
Mitglied: bastla
06.07.2011 um 12:45 Uhr
Hallo Progfreund!

Abgesehen davon, dass Du vielleicht erklären könntest, wozu das Ganze gut sein soll:
Ich möchte die beim call Aufruf als Parameter übergebenen echo [Text] als Variablen setzen.
Setzt Du doch schon vor dem Aufruf ...
Dann sollen durch den Aufruf call :DoppelteAusgabe "!varSpeicherpfad!\!varSpeichername!.txt"%varDelim%"%varDatumAusgabeVariable1%"
die übergebenen Parameter Verzeichnis, Verzeichnisname und echo [Text] verarbeitet werden.
Welchen Sinn hat die Übergabe als Parameter, wenn doch die Variablen ohnehin schon existieren (bzw, was den Speicherort angeht, vorweg erstellt werden könnten)? Die Variablen stehen ja im Unterprogramm zur Verfügung und könnten auch mit einer "for /f"-Schleife nacheinander angesprochen werden, etwa:
for /f "tokens=1* delims==" %%i in ('set varDatumAusgabeVariable') do @echo Inhalt von %%i: %%j
Dazu wäre es sinnvoll, die Nummern der Variablen durchgängig zweistellig zu schreiben, also etwa:
set "varDatumAusgabeVariable01=."
Und: Wozu überhaupt die einzelnen Zeilen erst in Variable schreiben, anstatt gleich direkt in die Zieldatei?

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch: Parameter in einer For Schleife an eine Variable übergeben
gelöst Frage von BatchAnfaenger91Batch & Shell2 Kommentare

Hallo Liebe Leute, nun bin ich fast am Ende und bleibe trotzdem an Parameterübergabe hängen. Hier ist mein bisheriger ...

Batch & Shell
Zähler in FOR Schleife als Parameter für Funktionsaufruf
gelöst Frage von robxBatch & Shell11 Kommentare

Hallo, ich will in einer FOR Schleife eine Funktion aufrufen, 1. Parameter soll ein Zähler sein, der sich jeweils ...

Batch & Shell
Ungültiger Parameter icacls in FOR-Schleife
gelöst Frage von blue0711Batch & Shell10 Kommentare

Hallo, ich steh etwas auf dem Schlauch. Folgendes bringt mir immer nur die Fehlermeldung Ungültiger Parameter "Domänen-Admins" und Ungültiger ...

Batch & Shell
Batch Probleme mit Dateipfaden in for-Schleife
gelöst Frage von Jonas1806Batch & Shell1 Kommentar

Hallo zusammen, Ich habe es mir vor einigen Wochen zum Ziel gesetzt, einen Chat für die Schule zu programmieren. ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 3 StundenWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 10 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 11 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1012 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server23 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Exchange Server
Exchange empfängt Emails - Kann aber keine Senden
gelöst Frage von niklasschaeferExchange Server11 Kommentare

Hallo, ich stehe gerade bei mir zuhause vor folgender Problemstellung. Gegeben sind 2x Hyper-V Host mit Windows Server 2016 ...