Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 6979 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch-Probleme bei Verschlüsselung

Frage von Jonas1806 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Probleme mit Dateipfaden in for-Schleife (1)

Frage von Jonas1806 zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Winrar entpacken - Probleme bei Pfad (7)

Frage von Concurve zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...