2.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von silbersurfer Mitglied (545 Punkte)
Hallo

Nachfolgend hab ich einen Batch, der folgendes macht. Dieser Batch wird z.B. in einem Verzeichnis D:\Bilder\Fasching2013 ausgeführt. Und gibt dann den Ordner Fasching2013 aus. Funktioniert ganz gut, solange da keine Leerzeichen im Pfad dabei sind. Also z.B. der Pfad "D:\Tolle Bilder\Vom Fasching 2013" . Dann klappt dieser Batch nicht mehr. Also schaut mir das bitte mal an. Und stellt mir den bitte so um, das er auch Leerzeichen begreift. Also nach dem letzten Beispiel sollte er dann "Vom Fasching 2013" ausgeben.


@ echo off


rem ================================================== =====
rem Setzt den aktuellen Pfad in Source_Path
rem ================================================== =====
set Source_Path=%~dp0

rem ================================================== =====
rem Gibt den kompletten Pfad raus, aber ohne "\" am Schluss
rem ================================================== =====
set Teil01=%Source_Path:~0,-2%
echo Teil01=%Teil01%
echo.

rem ================================================== =====
rem Teil01 wird in var1 abgelegt
rem ================================================== =====
SET var1=%Teil01%
:anfang
rem ================================================== =====
rem var1 wird von vorne her bis zum nächsten "\" beschnitten
rem ================================================== =====
SET var1=%var1:*\=%
rem ================================================== =====
rem Wenn var1 keinen "\" mehr enthält, ist das der letzte Ordner, ansonsten
rem weiter beschneiden.
rem ================================================== =====
IF %var1%==%var1:*\=% (SET ordner=%var1%) ELSE GOTO :anfang
echo Ordner=%ordner%
Pause


Download - Batch:
http://www.flootr.com/download.php?file=e0731050475a1cfdca2027cb2f81730f

Gruß

10 Antworten

0 Punkte
Beantwortet von
und warum sollten "wir" das tun? was machst du mit dem batch. wie gehts weiter?
0 Punkte
Beantwortet von silbersurfer Mitglied (545 Punkte)
>> und warum sollten "wir" das tun? was machst
>> du mit dem batch. wie gehts weiter?

Tsja Gute Frage. Ja Nee ist klar.
Ich hab das mal vor längerer Zeit mal aus dem Internet irgendwo ausgegraben. Und wollte schon immer mal wissen wie man das umstellt, das es auch mit Leerzeichen funzt. Ich wollte mich halt wieder etwas mit dieser Batchlerei befassen. Wie das halt so geht. Ich hab mir halt vorgestellt, das hier so richtig gute Experten gibt, die mal wieder was zum Knobeln haben wollen. Also knobelt mal schön Kameraden.

Gruß
0 Punkte
Beantwortet von
eigentlich recht easy
Ordnernamen mit Leerzeichen müssen in batches in Anführungszeichen gesetzt werden.

nun darfst aber erst selber mal knobeln, sollst ja auch was lernen :)
0 Punkte
Beantwortet von conny77a Mitglied (521 Punkte)
an der zensierten Stelle chip Punkt de einsetzen
0 Punkte
Beantwortet von
batch lernt man am besten durch ausprobieren.

in deinem beispiel ist sowieso ein faul, nämlich das -2. das deutet darauf hin, dass ursprünglich schon die hochkommata vorgesehen waren.

mach einfach ganz am anfang

set Source_Path="%~dp0" anführungszeichen dazu und alles passt.

LG
0 Punkte
Beantwortet von silbersurfer Mitglied (545 Punkte)
>> mach einfach ganz am anfang ...

Also so ganz klappt das nicht. Und zwar wird ein Fehler produziert bei

IF %var1%==%var1:*\=% (SET ordner=%var1%) ELSE GOTO :anfang

Daduch wird der Ordner nicht ausgegeben beim Befehl

echo Ordner=%ordner%

Bei " SET var1=%var1:*\=% " wird jedoch der Ordner richtig in der Variable übernommen. Das konnte ich durch einfügen eines ECHO 's testen. Kann man das noch analysieren, was da falsch ist.

Ansonsten der Tip von @Conny77a hat natürlich super funktioniert. Praktisch nur mit einer Zeile ermittelt der Ordner.

Gruß
0 Punkte
Beantwortet von
IF "%var1%"=="%var1:*\=%" (SET ordner=%var1%) ELSE GOTO :anfang
so könnte es gehen. Nicht getestet
0 Punkte
Beantwortet von silbersurfer Mitglied (545 Punkte)
>> so könnte es gehen

Ja danke jetzt klappt es. Toll

Gruß
0 Punkte
Beantwortet von massaraksch Experte (3.1k Punkte)
Beispielscript:
@echo off
set SOURCE=%~dp0
set SOURCE=%SOURCE:~0,-1%
for /f "delims=" %%i in ("%SOURCE%") do @set ORDNER=%%~ni
echo %ORDNER%
pause

In der Variablen %ORDNER% sollte dann der Name (incl. Leerzeichen) des Verzeichnisses deines Scriptes stehen.

mfg, Massaraksch
...