sebel1
Goto Top

Batch hat probleme mit Leerzeichen bei Prozent

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

Content-ID: 123845

Url: https://administrator.de/forum/batch-hat-probleme-mit-leerzeichen-bei-prozent-123845.html

Ausgedruckt am: 28.12.2024 um 01:12 Uhr

bastla
bastla 31.08.2009 um 13:31:28 Uhr
Goto Top
Hallo sebel1!

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

Grüße
bastla
pieh-ejdsch
pieh-ejdsch 31.08.2009 um 14:01:57 Uhr
Goto Top
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.


Von Irgenwo musst Du ja den Parameter Übergeben vllt liegt da der Fehler
Falsch:
 IF C:\Ordner 1 == %Variable%
FOR /f %%i in ('DIR /b C:\Ordner 1') do SET neu=%%i & CALL :MARKE %%i  
Richtig
 IF "C:\Ordner 1" == "%Variable%"  
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
bastla
bastla 31.08.2009 um 14:09:20 Uhr
Goto Top
... 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
sebel1
sebel1 01.09.2009 um 09:18:17 Uhr
Goto Top
Hallo

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

:: DatOpener ::::::::::::::::::::::::::::::::::::::::::::::::::

If "%~1"=="" goto :SelfInstall  
Set Dest=c:\temp
if Not Exist "%Dest%\" MD "%Dest%\"  
Move "%1" "%Dest%\"  
Ren "%Dest%\%~nx1" "%~n1.html"  
Start "" "%Dest%\%~n1.html"  
pause
goto :EOF
:SelfInstall
(assoc .dat=DatOpener)||(echo Admin-Rechte notwendig! &Pause&Exit /B)
ftype DatOpener="%%comspec%%" /C "%~f0" %%L  
pause
:: 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
pieh-ejdsch
pieh-ejdsch 01.09.2009 um 09:40:20 Uhr
Goto Top
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....

:: DatOpener ::::::::::::::::::::::::::::::::::::::::::::::::::
If "%~1"=="" goto :SelfInstall  
Set Dest=c:\temp
if Not Exist "%Dest%\" MD "%Dest%\"  
Move %1 "%Dest%\%~n1.html"  
Start "" "%Dest%\%~n1.html"  
pause
goto :EOF
:SelfInstall
(assoc .dat=DatOpener)||(echo Admin-Rechte notwendig! &Pause&Exit /B)
ftype DatOpener="%%comspec%%" /C "%~f0" %%L  
pause
:: DatOpener ::::::::::::::::::::::::::::::::::::::::::::::::::

Gruß Phil
sebel1
sebel1 01.09.2009 um 09:55:30 Uhr
Goto Top
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
bastla
bastla 01.09.2009 um 10:07:04 Uhr
Goto Top
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
sebel1
sebel1 01.09.2009 um 10:33:24 Uhr
Goto Top
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
81825
81825 01.09.2009 um 10:39:30 Uhr
Goto Top
Hi, bastla,
Zitat von @bastla:
(woher kommt eigentlich %%L?)

Aus dem Nichts. face-smile 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. face-big-smile
bastla
bastla 01.09.2009 um 10:47:50 Uhr
Goto Top
@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
sebel1
sebel1 01.09.2009 um 10:49:37 Uhr
Goto Top
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
81825
81825 01.09.2009 um 10:54:34 Uhr
Goto Top
Hi, sebel1
welches Script meinst du mit "Lords Script"? Dieses von LotPings(anderer Kosename?)
Lot = Lord of the .... face-wink


@bastla

Der Parameter "%L" hat eine besondere Bedeutung, welche, ist mir aber entfallen. Er wird allerdings in den Shell-Einträgen sehr oft verwendet.
sebel1
sebel1 01.09.2009 um 10:57:44 Uhr
Goto Top
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
81825
81825 01.09.2009 um 11:58:32 Uhr
Goto Top
Letzteres. face-wink

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.
sebel1
sebel1 01.09.2009 um 12:10:42 Uhr
Goto Top
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
bastla
bastla 01.09.2009 um 12:21:40 Uhr
Goto Top
@81825
Eigentlich sollte es mit
ftype DatOpener="%%comspec%%" /C "%~f0" "%%1"
mit jedem Pfad der "DatOpener.cmd" funktionieren ...

Grüße
bastla
81825
81825 01.09.2009 um 12:25:13 Uhr
Goto Top
Eigentlich ja, faktisch nicht. face-smile

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.face-big-smile
bastla
bastla 01.09.2009 um 12:48:09 Uhr
Goto Top
@81825
Nach einem "cmd /?" muss ich auch das "eigentlich" zurückziehen ... face-wink

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

Grüße
bastla
81825
81825 01.09.2009 um 12:58:06 Uhr
Goto Top
@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. face-smile Pfad ohne Leerzeichen ist einfacher. *gg
bastla
bastla 01.09.2009 um 13:04:54 Uhr
Goto Top
@81825
Pfad ohne Leerzeichen ist einfacher. *gg
Dort bin inzwischen (und sebel1 schon früher) auch angekommen ... face-wink

Grüße
bastla
81825
81825 01.09.2009 um 13:28:57 Uhr
Goto Top
Zitat von @bastla:
Nach einem "cmd /?" muss ich auch das "eigentlich" zurückziehen ... face-wink

Das hätte ich vielleicht auch mal aufrufen und lesen sollen, dann hätte ich mir die Tests sparen können. face-big-smile
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 face-wink
bastla
bastla 01.09.2009 um 13:53:48 Uhr
Goto Top
... obwohl - einen hätt' ich noch:
ftype DatOpener="%%comspec%%" /C cls & "%~f0" "%%1"
Grüße
bastla
81825
81825 01.09.2009 um 14:01:29 Uhr
Goto Top
Einer geht noch, einer geht noch rein ? *gg
Nix da, ich habe den ganzen Quatsch wieder entsorgt. face-wink
pieh-ejdsch
pieh-ejdsch 01.09.2009 um 14:27:10 Uhr
Goto Top
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