funcarver
Goto Top

Zeichen von einem Pfad zählen - die 2te

Hallo zusammen,

ich habe hier einen älteren Beitrag gefunden der es mir ermöglicht die Anzahl der Zeichen zu zählen und das Ergebnis in einem Logfile auszugeben.

DOS Befehle - Kommandozeile - Zeichen von einem Pfad zählen - Tree

Das Batch ist im vorletzten Beitrag, von Biber.

Funktioniert wunderbar, aber....

Ich bekomme beim Scannen von Ordnern und Dateinamen, die ein Sonderzeichen wie z.B. ein "+", "#" oder ein "&" enthalten, eine Fehlermeldung.

Der Befehl "Garten" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Wobei das Sonderzeichen hier nicht angezeigt wird.

Woran liegt es bzw. wie kann ich es beheben?

Ich muss in 3 Wochen einen Fileserver migrieren und wollte desn Server vorher auf die Verzeichnis- und Pfadlänge testen damit es keine Verzögerungen gibt.

Vielen Dank im Voraus...

Content-ID: 182390

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

Ausgedruckt am: 26.11.2024 um 09:11 Uhr

60730
60730 21.03.2012 um 22:15:08 Uhr
Goto Top
moin,

ich darf doch?

Ich bekomme beim Scannen von Ordnern und Dateinamen, die ein Sonderzeichen wie z.B. ein "+", "#" oder ein "&" enthalten, eine Fehlermeldung.
Ich muss in 3 Wochen einen Fileserver migrieren und wollte desn Server vorher auf die Verzeichnis- und Pfadlänge testen damit es keine Verzögerungen gibt.

naja - mit anderen Worten, ihr schaufelt auf ner neuen Harten Ware eure alt Daten und bevors Ärger gibt, werden die Problemfälle beseitigt.
Klarer Fall von Prof. Klosbrühe.

Ordnernamen edit Dateinamen natürlich auch mit Sonderzeichen sind besonders zu behandeln und jeder, der irgendwann mal wegen sowas auf die Schnauze gefallen ist, meidet die wie der urbi et orbi die rothaarigen Praktikanten (männliche Exemplare schliesse ich mal aus)

In diesem Sinne "der Stadt und dem Weltkreis" von kugel ist keine Rede gewesen.
Also anstatt da jetzt mit nem VBS dranzugehen - machs richtig, denn diese Sonderzeichen sorgen immer für Stress.
Immer und immer wieder.

Gruß
bastla
bastla 21.03.2012 um 22:19:59 Uhr
Goto Top
Hallo funcarver!

Die Verwendung zusätzlicher Anführungszeichen sollte eigentlich genügen:
::--MidiGetLongPath.bat [Parameter1: Ab-Länge] [[optParameter2: Lw:\Pfad[[\name.ext]]]]
@echo off & setlocal
set /a Maxlen=%1
for /f "delims=" %%i in ('dir /s /b %~2') do echo "%%~pnxi">%temp%\sz && for %%j in (%temp%\sz) do call :EchoIfGTR %%~zj "%%~i"  
del %temp%\sz >nul 2>nul
goto :eof
:EchoIfGtr parameter1:LängeIST parameter2 Pfad/Dateiname in Anfü-Zeichen
Set /a thislen=%1 - 2
If %thislen% GTR %maxlen% echo [%thislen%] %2
::-----MidiGetLongPath.bat [getestete Skizze]
Grüße
bastla

P.S.: Dass auch "#" Probleme verursacht hätten, kann ich eigentlich nicht glauben ...
funcarver
funcarver 22.03.2012 um 19:49:57 Uhr
Goto Top
Der Weg war der Richtige, war aber noch ein kleiner Fehler drin. Hab es dann aber gefunden....

Danke...

::--MidiGetLongPath.bat [Parameter1: Ab-Länge] [[optParameter2: Lw:\Pfad[[\name.ext]]]] 
@echo off & setlocal & set /a Maxlen=%1 
@for /f "delims=" %%i in ('dir /s /b %~2') do @( echo "%%~pnxi">%temp%\sz && for %%j in (%temp%\sz) do @call :EchoIfGTR %%~zj "%%~i"   
)
del %temp%\sz >nul 2>nul 
goto :eof 
:EchoIfGtr parameter1:LängeIST parameter2 Pfad/Dateiname in Anfü-Zeichen 
Set /a thislen=%1 - 2 
If %thislen% GTR %maxlen% echo [%thislen%] %2 
::-----MidiGetLongPath.bat [getestete Skizze]
bastla
bastla 22.03.2012 um 20:46:36 Uhr
Goto Top
Hallo funcarver!
war aber noch ein kleiner Fehler drin.
Welcher Fehler mit welcher Auswirkung?

Grüße
bastla
funcarver
funcarver 22.03.2012 um 21:18:12 Uhr
Goto Top
Zeile 4,

@( echo "%%~pnxi">%temp%\sz && for %%j in (%temp%\sz) do @call :EchoIfGTR %%~zj "%%~i" )

das @ und danach die klammer.....
bastla
bastla 22.03.2012 um 21:23:41 Uhr
Goto Top
Hallo funcarver!

Diese überflüssigen Ergänzungen (meine Variante von Bibers Batch bringt ohne diese Zusätze das identische Ergebnis) sind eine Leistung, die ich an Deinen Stelle nicht unbedingt in den Lebenslauf aufnehmen würde ... face-wink

Grüße
bastla

P.S.: Als Du "Fehler" schriebst, hatte ich schon befürchtet, dass Du bemerkt hättest, dass die Längenberechnung ein falsches Ergebnis liefert ... face-wink
funcarver
funcarver 22.03.2012 um 21:32:35 Uhr
Goto Top
das falsche Ergebnis? ist mir nicht aufgefallen, obwohl ich einen Testlauf mit 20 Zeichen gemacht habe, die Zeichen hab ich anschließend gezählt...

schau ich mir morgen noch mal an.....
Biber
Biber 22.03.2012 um 22:17:22 Uhr
Goto Top
Moin Pfannenkratzer,

Zitat von @funcarver:
das falsche Ergebnis? ist mir nicht aufgefallen, obwohl ich einen Testlauf mit 20 Zeichen gemacht habe, die Zeichen hab ich anschließend gezählt...

schau ich mir morgen noch mal an.....
Hmm, das müsstest du sogar noch heute während der abendlichen Talkshow rausbekommen.

Überleg mal - wenn ich vorher im alten Schnipsel den Pfad+Dateinamen OHNE zwei Anführungszeichen weggeschrieben habe und schon mit (-2) korrigieren musste...
Dann musst du wohl bei bastlas Variante mit was korrigieren?

Grüße und Thx@bastla
Biber
bastla
bastla 22.03.2012 um 22:26:08 Uhr
Goto Top
@Biber
Nein, daran liegt's nicht - Du hattest ja in die sz-Datei den Pfad ohne Laufwerksbuchstaben (wohl, um damit CR + LF zu kompensieren - clever face-smile) geschrieben - die "-2" sind für die Anführungszeichen dazugekommen ...

So wenig erklärlich das (für mich) auch ist - das eine Zeichen zuviel entsteht durch das Leerzeichen vor dem "&&" (und auch wenn, was ja genügen würde, nur mit "&" verknüpft wird, ändert das nix), das mit in der "sz"-Datei landet - mit
for /f "delims=" %%i in ('dir /s /b %~2') do echo "%%~pnxi">%temp%\sz&& for %%j in (%temp%\sz) do call :EchoIfGTR %%~zj "%%~i"
oder mit
for /f "delims=" %%i in ('dir /s /b %~2') do (  
    echo "%%~pnxi">%temp%\sz  
    for %%j in (%temp%\sz) do call :EchoIfGTR %%~zj "%%~i"  
)
stimmt's ...

Grüße
bastla
Biber
Biber 23.03.2012 um 19:55:51 Uhr
Goto Top
Moin bastla,

na, da sind wir ja wieder mal über ein neues interessantes Feature der Redmonder Nachwuchscoder gestolpert.

Ich finde das Verhalten der CMD.exe da auch etwas zickig - der Effekt lässt sich zwar leicht vermeiden, aber wirklich ja nur, wenn jemand mit so etwas rechnet.

Eine andere Umgehung dieser Falschberechnung-wegen-unerwartetem-Leerzeichen-am-Ende wäre so:
 
:: so kommt ein Leerzeichen zuviel mit in die Temp-Datei "sz"  
for /f "delims=" %%i in ('dir /s /b %~2') do echo "%%~pnxi">%temp%\sz && for %%j ..........  

:: so, mit dem echo-Befehl in Klammern, nicht mehr
for /f "delims=" %%i in ('dir /s /b %~2') do (echo "%%~pnxi">%temp%\sz) && for %%j ....  

Grüße
Biber