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

Batch hat probleme mit Leerzeichen bei Prozent

Frage Entwicklung Batch & Shell

Mitglied: sebel1

sebel1 (Level 1) - Jetzt verbinden

31.08.2009, aktualisiert 13:18 Uhr, 7045 Aufrufe, 24 Kommentare

Batchdatei kann keine Leerzeichen verarbeiten...

Hallo

Ich habe eine Batch Datei, erstellt von Lotpings, die ein kleines Problem hat.

Der Funktion der Batchdatei ist folgende: Beim oeffnen einer .dat Datei wird diese in einen Temporaeren Ordner kopiert, umbenannt in .html und geoeffnet.

Dies funktioniert auch wunderfein. Nur leider funktioniert dies NUR, wenn der Pfad zur Batchdatei an einem Stueck ohne Leerzeichen ist. Sobald Ich die Datei unter einem Pfad mit Leerzeichen benuetze kommt der Fehler das er die Datei nicht finden kann. Als Variable wird "%~1" genutzt. Als Ausgabe kommt dann: "C:\Dokumente" statt C:\Dokumente und Einstellungen\......

Wie ist es machbar das es auch mit Leerzeichen klappt? Mit Anfuehrungszeichen habe ich dies bereits versucht.


Freundliche Gruesse
Mitglied: bastla
31.08.2009 um 13:31 Uhr
Hallo sebel1!

Ob es Dir wohl zumutbar wäre, den Batch hier zu posten (und zwar als "Code" formatiert)?

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
31.08.2009 um 14:01 Uhr
Hallo Sebel1,

Als Variable wird "%~1" genutzt. Als Ausgabe kommt dann: "C:\Dokumente" statt C:\Dokumente und Einstellungen\......
bei der Uebergabe von Variablen oder Kompletten Pfaden sowie Zeichenfolgen welchen ein Leerzeichen enthalten müssen Anführungsding drumherumgebastelt werden. - Welche Federfiehlatschen oder auch Gänsefüsschen gennannt werden.

wenn Du Wildcards benutzt solltest Du eventuell auch die Anführungszeichen drumrum setzen. Das gilt auch für die verwendung in anderen Befehlen.

und natürlich nicht zu vergessen die BefehlsverkettungsZeichen: & && | ( ) ||

Von Irgenwo musst Du ja den Parameter Übergeben vllt liegt da der Fehler
Falsch:
01.
 IF C:\Ordner 1 == %Variable% 
02.
FOR /f %%i in ('DIR /b C:\Ordner 1') do SET neu=%%i & CALL :MARKE %%i
Richtig
01.
 IF "C:\Ordner 1" == "%Variable%" 
02.
FOR /f %%i in ('DIR /b "C:\Ordner 1"') do SET "neu=%%i" & CALL :MARKE "%%~i"
Schau mal nach ob irgendwo die Anführungzeichen fehlen

Gruß Phil
Bitte warten ..
Mitglied: bastla
31.08.2009 um 14:09 Uhr
... bzw, um eine weitere Möglichkeit zu berücksichtigen:
FOR /f "delims=" %%i in ('DIR /b "C:\Ordner 1"') do SET "neu=%%i" & CALL :MARKE "%%~i"
Grüße
bastla
Bitte warten ..
Mitglied: sebel1
01.09.2009 um 09:18 Uhr
Hallo

hier mal der Code von LotPings welcher ein kleinesbisschen von mir geaendert wurde:

01.
:: DatOpener :::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
 
03.
If "%~1"=="" goto :SelfInstall 
04.
Set Dest=c:\temp 
05.
if Not Exist "%Dest%\" MD "%Dest%\" 
06.
Move "%1" "%Dest%\" 
07.
Ren "%Dest%\%~nx1" "%~n1.html" 
08.
Start "" "%Dest%\%~n1.html" 
09.
pause 
10.
goto :EOF 
11.
:SelfInstall 
12.
(assoc .dat=DatOpener)||(echo Admin-Rechte notwendig! &Pause&Exit /B) 
13.
ftype DatOpener="%%comspec%%" /C "%~f0" %%L 
14.
pause 
15.
:: DatOpener ::::::::::::::::::::::::::::::::::::::::::::::::::

Sorry, dass ich nicht gleich den Code hinzubezogen habe.


pieh-ejdsch: Die Variante mit Anfuehrungszeichen habe ich selbstverstaendlich als erstes Versucht. Das klappt ja sonst auch immer.


freundliche gruesse
Bitte warten ..
Mitglied: pieh-ejdsch
01.09.2009 um 09:40 Uhr
Hi sebel1,

in Deiner Zeile 06 gibst Du in der Variable wenn der Pfad oder die Datei Leerzeichen enthält das "" nochmal mit. deswegen reicht für den Move das %1 aus da die Gänsefüsschen ja enthalten sind , wenn Leerzeichen drin sind.
MOVE Bennent die Datei auch gleich mit um....

01.
:: DatOpener :::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
If "%~1"=="" goto :SelfInstall 
03.
Set Dest=c:\temp 
04.
if Not Exist "%Dest%\" MD "%Dest%\" 
05.
Move %1 "%Dest%\%~n1.html" 
06.
Start "" "%Dest%\%~n1.html" 
07.
pause 
08.
goto :EOF 
09.
:SelfInstall 
10.
(assoc .dat=DatOpener)||(echo Admin-Rechte notwendig! &Pause&Exit /B) 
11.
ftype DatOpener="%%comspec%%" /C "%~f0" %%L 
12.
pause 
13.
:: DatOpener ::::::::::::::::::::::::::::::::::::::::::::::::::
Gruß Phil
Bitte warten ..
Mitglied: sebel1
01.09.2009 um 09:55 Uhr
Hallo Phil

Ich habe das ganze auch ohne die zweiten Anruehrungszeichen versucht. So war das "Ur-Script" von LotPings aufgebaut. Leider hat auch dies nicht funktioniert.

Wenn du moechtest kannst du das ganze gerne mal testen. Als Testversuch einfach eine Textdatei in .dat umbennen und einerseits unter z.B.: C:\ reinlegen und eine auf den Desktop. Die unter C wird das Script fein in Temp legen und ausfuehren, die unter dem Desktop nicht. (Die Script-BatDatei muss einmals vorher doppelgeklickt werden, damit Sie sich selbst "verknuepft".

Eventuell kannst du mir bei solch einem Versuch noch einen Tipp bzw. die Loesung fuer mein Problem geben.


Hier mal der Verlauf beim oeffnen einer .dat Datei aus dem Outlook heraus:
C:\Dokumente und Einstellungen\sebel\Lokale Einstellungen\Temporary Internet Files>If "C:\Dokumente" == "" goto :SelfInstall
C:\Dokumente und Einstellungen\sebel\Lokale Einstellungen\Temporary Internet Files>Set Dest=c:\temp
C:\Dokumente und Einstellungen\sebel\Lokale Einstellungen\Temporary Internet Files>if Not Exist "c:\temp\" MD "c:\temp\"
C:\Dokumente und Einstellungen\sebel\Lokale Einstellungen\Temporary Internet Files>Move C:\Dokumente "c:\temp\Dokumente.html"
Das System kann die angegebene Datei nicht finden.
C:\Dokumente und Einstellungen\sebel\Lokale Einstellungen\Temporary Internet Files>Start "" "c:\temp\Dokumente.html"


Freundliche Gruesse
Bitte warten ..
Mitglied: bastla
01.09.2009 um 10:07 Uhr
Hallo sebel1 und PH!

Das Problem resultiert offensichtlich bereits aus der Übergabe des Pfades an den Batch, daher versuchsweise in Zeile 11 (woher kommt eigentlich %%L?) die entsprechenden Anführungszeichen setzen:
ftype DatOpener="%%comspec%%" /C "%~f0" "%%L"
Grüße
bastla
Bitte warten ..
Mitglied: sebel1
01.09.2009 um 10:33 Uhr
Hallo bastla,

Ich habe sogleich dies versucht. Leider ohne Erfolg. Gleiches Ergebnis, nach wie vor. Welchen Sinn %%L hat weiss ich leider nicht. Wie oben erwaehnt ist das Script nicht von mir, sondern von LotPings. Er hat dies netterweiße fuer mich in einem anderen Administrator Thread geschrieben.


Der Fehler tritt ja bereits in der ersten get Zeile auf. Mit C:\Dokumente" ....... bei Pfaden ohne Leerzeichen ist dieser Pfad komplett:

C:\Monatssicherung\logs\08>If "C:\Monatssicherung\logs\08\Mail.dat" == "" goto :SelfInstall
C:\Monatssicherung\logs\08>Set Dest=c:\temp
C:\Monatssicherung\logs\08>if Not Exist "c:\temp\" MD "c:\temp\"
C:\Monatssicherung\logs\08>Move C:\Monatssicherung\logs\08\Mail.dat "c:\temp\Mail.html"
C:\Monatssicherung\logs\08>Start "" "c:\temp\Mail.html"


Freundliche Gruesse
Bitte warten ..
Mitglied: 81825
01.09.2009 um 10:39 Uhr
Hi, bastla,
Zitat von bastla:
(woher kommt eigentlich %%L?)

Aus dem Nichts. Das wird für den Shell\open\command - Eintrag als Parameter "%L" benötigt.

Bei mir funktioniert Lords Script problemlos, auch vom Desktop
Edit: Nee, war gelogen.
Bitte warten ..
Mitglied: bastla
01.09.2009 um 10:47 Uhr
@81825
Das wird für den Shell\open\command - Eintrag als Parameter "%L" benötigt.
Dort würde ich aber eher ein "%1" verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: sebel1
01.09.2009 um 10:49 Uhr
Hallo Greypeter,

welches Script meinst du mit "Lords Script"? Dieses von LotPings(anderer Kosename?) Oder ein komplett anderes? Per Google habe ich nichts anderes gefunden.

Freundliche Gruesse
Bitte warten ..
Mitglied: 81825
01.09.2009 um 10:54 Uhr
Hi, sebel1
welches Script meinst du mit "Lords Script"? Dieses von LotPings(anderer Kosename?)
Lot = Lord of the ....


@bastla

Der Parameter "%L" hat eine besondere Bedeutung, welche, ist mir aber entfallen. Er wird allerdings in den Shell-Einträgen sehr oft verwendet.
Bitte warten ..
Mitglied: sebel1
01.09.2009 um 10:57 Uhr
Hallo

kann es sein das du hingegangen bist und hast eine .dat Datei mit "Oeffnen mit" mit dem Batch Programm verknuepft? oder schon so wie eigentlich gedacht, per einmaligem Doppelklick auf die Batch Datei?

Freundliche Gruesse
Bitte warten ..
Mitglied: 81825
01.09.2009 um 11:58 Uhr
Letzteres.

Die DatOpener.cmd darf nicht selbst auf dem Desktop liegen, sondern muss in einem Pfad residieren, der keine Leerzeichen enthält.

Die Zeile 13 in deinem Script muss wie folgt geändert werden:

ftype DatOpener="%%comspec%%" /C %~f0 "%%1"

Danach die Datopener einmal aufrufen.

Dann klappt es auch mit dem Aufruf einer Datei vom Desktop.
Bitte warten ..
Mitglied: sebel1
01.09.2009 um 12:10 Uhr
Hallo

Jawoll, das ding funktioniert!!!

Das dort der Fehler liegt, haette ich nicht gedacht. Ich hab immer gedacht der Fehler muss schon ganz am Anfang liegen, nachdem dort ja der Pfad schon fehlerhaft angezeigt wird. Aber stimmt, mit dem ftype wird ja das Script angesprochen und daraus resultiert dann auch das andere. Das dass Programm ohne Leerzeichen herumliegt wurde schon beruecksichtigt.


Perfekt. Ich danke vielmals und schliesse diesen Thread als GELOEST.


Freundliche Gruesse
Bitte warten ..
Mitglied: bastla
01.09.2009 um 12:21 Uhr
@81825
Eigentlich sollte es mit
ftype DatOpener="%%comspec%%" /C "%~f0" "%%1"
mit jedem Pfad der "DatOpener.cmd" funktionieren ...

Grüße
bastla
Bitte warten ..
Mitglied: 81825
01.09.2009 um 12:25 Uhr
Eigentlich ja, faktisch nicht.

Du kannst dir ja mit %cmdcmdline% mal ansehen, dass die Parameter offenbar korrekt übergeben werden (egal, ob als %L oder %1 definiert), allerdings kommt CMD selbst wohl damit nicht klar: %1 = Dokumente, % 2 = und und Rest gipsnich.
Bitte warten ..
Mitglied: bastla
01.09.2009 um 12:48 Uhr
@81825
Nach einem "cmd /?" muss ich auch das "eigentlich" zurückziehen ...

Hast Du es übrigens schon so:
ftype DatOpener="%~f0" "%%1"
versucht?

Grüße
bastla
Bitte warten ..
Mitglied: 81825
01.09.2009 um 12:58 Uhr
@bastla
Ja. Im Moment habe ich gerade ausgetestet, ob der angelegte Standard-Wert als Datentyp REG_EXPAND_SZ dafür verantwortlich ist. Wenn man den in REG_SZ ändert, funktioniert auch der lange Pfad mit Spaces, allerdings erst, wenn man openWithProgID einmal ausgeführt und bestätigt hat. Alles sehr merkwürdig. Pfad ohne Leerzeichen ist einfacher. *gg
Bitte warten ..
Mitglied: bastla
01.09.2009 um 13:04 Uhr
@81825
Pfad ohne Leerzeichen ist einfacher. *gg
Dort bin inzwischen (und sebel1 schon früher) auch angekommen ...

Grüße
bastla
Bitte warten ..
Mitglied: 81825
01.09.2009 um 13:28 Uhr
Zitat von bastla:
Nach einem "cmd /?" muss ich auch das "eigentlich" zurückziehen ...

Das hätte ich vielleicht auch mal aufrufen und lesen sollen, dann hätte ich mir die Tests sparen können.
Wenn man das allerdings jetzt weiterspinnt, dürfte es dann ja mit dem geänderten Datentyp REG_SZ auch nicht funktionieren. Tut es aber.
Nun gut, egal, Ablage 13 und Gruß an Bibers rothaarige Praktikantinnen
Bitte warten ..
Mitglied: bastla
01.09.2009 um 13:53 Uhr
... obwohl - einen hätt' ich noch:
ftype DatOpener="%%comspec%%" /C cls & "%~f0" "%%1"
Grüße
bastla
Bitte warten ..
Mitglied: 81825
01.09.2009 um 14:01 Uhr
Einer geht noch, einer geht noch rein ? *gg
Nix da, ich habe den ganzen Quatsch wieder entsorgt.
Bitte warten ..
Mitglied: pieh-ejdsch
01.09.2009 um 14:27 Uhr
Hallo wie funktioniert es denn wenn in der Batch

Zeile 06.
Start "" "%Dest%\%~n1.html"

mit
Start "" "" "%Dest%\%~n1.html"

getaucht wird ? Wenn Du als Zwei Parameter /C Pfad/Batchdatei
schon in im Handling beschrieben hast?


Oder Du Machst denb Mist mit der festlegung des datentypes weg und Veränderst die Batch so, das Du die Files auf die Batch ziehst. oder eine Verknüpfung der Batch. Vllt geht das mal besser...
Gruß Phil
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
BATCH: Leerzeichen im Registry Pfad
gelöst Frage von 118710Batch & Shell1 Kommentar

Hallo zusammen, dies ist mein erste Beitrag hier und ich hoffe ich bin richtig :P So! Erst ein mal ...

Batch & Shell
Batch: doppeltes Leerzeichen in Dateinamen?
gelöst Frage von WoswaasiBatch & Shell3 Kommentare

Hallo! Wir verarbeiten bei uns in der Arbeit Audio-Dateien, die über Nacht in 5-Minuten-Abschnitte gesplittet werden. Ich habe dafür ...

Batch & Shell
Batch Variable setzten mit Leerzeichen
gelöst Frage von Marlon1Batch & Shell3 Kommentare

Hallo :) Ich würde gerne das man mit "set /p code= " 2 Wörter in die Variable "code" setzen ...

Batch & Shell
Leerzeichen per Batch entfernen vor der Weiterbearbeitung
gelöst Frage von daHartlBatch & Shell3 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, per Batch alle Leerzeichen in einem Dateinamen durch "-" zu ersetzten? Das Leerzeichen ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter wieder installieren auf einer frischen Windows-Installation

Tipp von Lochkartenstanzer vor 12 StundenMicrosoft Office

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 14 StundenDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 15 StundenSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 18 StundenMicrosoft Office1 Kommentar

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Server-Hardware
Veeam Backup Server stürzt alle paar Tage ab
Frage von Leo-leServer-Hardware11 Kommentare

Hallo Forum, ich habe momentan folgendes Problem. Veeam Backup and Replication 9.5 u2 auf voll gepatchten DL 380 G7 ...

Windows 10
Win10 Laptop findet keine Netzwerkgeräte und Freigaben mehr
Frage von CoolzeroWindows 1010 Kommentare

Hi, seit ein paar Tagen habe ich das Problem das mein Windows 10 Laptop keine Geräte mehr in der ...

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell10 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...