-kuwi-
Goto Top

Bug im Script - wer kennt sich aus?

Hallo!

Ich beziehe mich auf folgenden Thread: &query=ordnergr%C3%B6%C3%9Fe+batch verzeichnisstruktur auslesen und ordnergroesse anzeigen

Bug: Wenn im Verzeichnispfad ein &-Zeichen vorkommt, so steigt das Script aus.. face-sad

Da ich dies nicht vermeiden kann und ich das Script leider auch nicht ganz interpretieren kann, wollte
ich fragen ob mir hier jemand helfen kann. Wie muß ich das Script abändern, dass auch &-Zeichen
im Pfad verarbeitet werden?

Schonmal vielen Dank im Vorraus!

PS: Schönes WE!

Content-Key: 64321

Url: https://administrator.de/contentid/64321

Printed on: April 24, 2024 at 22:04 o'clock

Member: bastla
bastla Jul 20, 2007 at 15:06:19 (UTC)
Goto Top
Hallo -kuwi-!

Wenn Du in der allerletzten Zeile, ganz am Ende, "%~f1" unter Anführungszeichen setzt, sind diese zwar auch in der Ausgabe enthalten, aber der Batch müsste laufen.

Alternativ könntest Du alle Zeilen nach der alleinstehenden ")" (also ab Zeile 9) durch die folgenden ersetzen:
if not defined DirSize goto :eof
set "space20=____________________"  
set "Pfad=%~f1"  
set "Pfad=%Pfad:&=^&%"  
set "Dirsize=%space20%%Dirsize%"  
echo %DirSize:~-15%    %Pfad%

Grüße
bastla
Member: -kuwi-
-kuwi- Jul 20, 2007 at 20:09:20 (UTC)
Goto Top
Danke für deine Hilfe - jedoch bingt die Änderung nichts.. face-confused

Es existiert am Server z.B. ein Verzeichnis mit dem Namen "K&K".
Sobald das Batchfile an diese Position kommt, bricht es immer noch mit der Meldung
' "&" ist syntaktisch an dieser Stelle nicht verarbeitbar. ' ab.. face-sad

Komischerweise kommt auch hin und wieder die Meldung
' Der Befehl "und" ist entweder falsch geschrieben oder konnte nicht gefunden werden. '
Das Script läuft jedoch weiter. Anscheinend hat es Probleme mit langen Verzeichnisnamen, die
zudem noch Leerzeichen enthalten?!?
Member: -kuwi-
-kuwi- Jul 20, 2007 at 20:37:19 (UTC)
Goto Top
Hab mittlerweile rausgefunden, dass der Code Probleme macht:
if not [%%j]== goto :eof

face-sad

Weis aber noch keine Lösung dafür..
Member: bastla
bastla Jul 20, 2007 at 20:41:24 (UTC)
Goto Top
Hallo -kuwi-!

Hab's auch gerade gesehen. Wie wäre es mit
if not "%%j"=="" goto :eof  

Grüße
bastla
Member: bastla
bastla Jul 20, 2007 at 20:45:44 (UTC)
Goto Top
... und danach auch gleich noch
If exist "%~1" (    

Grüße
bastla
Member: bastla
bastla Jul 20, 2007 at 20:51:46 (UTC)
Goto Top
... bzw noch ein paar Anführungszeichen anstatt (nur, um sie durchgängig zu verwenden):

::------snipp Dirsize.bat  ---developed on administrator.de 2006/2007
:: Parameter1 Verzeichnisname [opt Par2: /R wie Rekursiv] [opt. par3 =Ebenen]@echo off & setlocal & Set DIRCMD=
IF /i "%2"=="/R" for /R "%~1" %%a in (.) do @%0 "%%a" %3  
if not "%2"=="" Set /a "Level=%2+2"  
if defined level for /f "delims=\ tokens=1,%level%" %%i in ("%~1") do if not "%%j"=="" goto :eof  
If exist "%~1" (     
  for /f "tokens=3" %%c in ('dir "%~1" /s ^2^>nul^| findstr /c:"Datei(en)" ') do set DirSize=%%c  
)
if not defined DirSize goto :eof
set "space20=____________________"  
set "Pfad=%~f1"  
set "Pfad=%Pfad:&=^&%"  
set "Dirsize=%space20%%Dirsize%"  
echo %DirSize:~-15%    %Pfad%
::------snapp Dirsize.bat
In dieser Version läuft es bei mir.

Grüße
bastla

[Edit] Kommentar angepasst. [/Edit]
Member: -kuwi-
-kuwi- Jul 20, 2007 at 21:00:26 (UTC)
Goto Top
So - SO läuft der Code bei mir stabil.. face-smile


::------snipp Dirsize.bat  ---developed on administrator.de 2006/2007
:: Parameter1 Verzeichnisname [opt Par2: /R wie Rekursiv] [opt. par3 =Ebenen]
@echo off & setlocal & Set DIRCMD=
IF /i [%2]==[/R] for /R "%~1" %%a in (.) do @%0 "%%a" %3  
if not [%2]== Set /a "Level=%2+2"  
if defined level for /f "delims=\ tokens=1,%level%" %%i in ("%~1") do if not [%%j]== goto :eof  
If exist ""%1"" (     
  for /f "tokens=3" %%c in ('dir "%~1" /s ^2^>nul^| findstr /c:"Datei(en)" ') do set DirSize=%%c  
)
if not defined DirSize goto :eof
:: In Space20 stehen 20 Leerzeichen - hier im Forum besser darstellbar als 20 Unterstriche
set "space20=____________________"  
set "Pfad=%~f1"  
set "Pfad=%Pfad:&=^&%"  
set "Dirsize=%space20%%Dirsize%"  
echo %DirSize:~-15%    %Pfad%
::------snapp Dirsize.bat
Member: bastla
bastla Jul 20, 2007 at 21:10:03 (UTC)
Goto Top
Hallo -kuwi-!

""%1"" würde ich als Overkill bezeichnen ... face-wink

Wenn Du die Grundstriche nicht magst, könntest Du zumindest, wie es der Variablenname auch schon vorgibt, 20 Leerzeichen verwenden - ansonsten sind die Zeilen
set "space20="  
:: und auch
set "Dirsize=%space20%%Dirsize%"  
schlicht entbehrlich.

Grüße
bastla

[Edit] Sorry, war aufgrund der mangelnden Formatierung mit < code> und < /code> (jeweils ohne Leerzeichen) nicht zu erkennen, dass die "_" noch da sind ... [/Edit]