Haennerson 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Hallo zusammen, ich bin auf der Suche nach einem bereits bestehenden Batch auf folgenden Befehl gestossen, den ich leider nicht verstehe und auch nicht recht weiss wie ich danach suchen soll :( if ("%Fullpath:~199,10%") GTR ("") echo %fullpath% Diese Zeile ist Teil eines Skript, welches mir Dateinamen (Pfadstruktur) mit einer Länge über 200 Zeilen ausgeben soll. GTR etc. ist klar, ich verstehe die if Klausel vorallem nicht... vorallem das "Zeichen" ":~". Kann mir wer bitte helfen? Dank & Gruss Zitieren Link zu diesem Kommentar
marka 584 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Es wäre sinnvoll, das gesamte Script (am Besten im erweiterten Beitragseditor in Programmcodetags) zu posten. Dann kann man nachvollziehen, welche Variablen wo erstellt werden. Zitieren Link zu diesem Kommentar
master-obi-wan 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Hallo Haennerson, folgendes Beispiel sollte selbsterklärend sein: set testvar=1234567890abcde[color="Red"]fghijklmno[/color]pqrstuvwxyz echo %testvar:~15,10% [b]ergibt diese Ausgabe:[/b] fghijklmno klar oder ? Zitieren Link zu diesem Kommentar
Haennerson 10 Geschrieben 11. Januar 2007 Autor Melden Teilen Geschrieben 11. Januar 2007 Hi, hier noch das gesamte Skript @echo off :: Aufruf beispiel1 [Laufwerk:] for /F %%i in ('dir %1\ /b /s') do call :loop %%i goto end :loop set Fullpath=%1 if ("%Fullpath:~199,10%") GTR ("") echo %fullpath% >>d:\groesser200.lst :end @Master: ja das sollte nun klar sein... @all: aber irgendwie leuchtet mir das noch nicht so ganz ein... Man holt also die ersten 200 Zeichen, da wäre wohl besser von 0-199? und schaut dann, ob die grösser sind als "", also als quasi nichts? Und da werden dann nur die ausgegeben, welche die 200 Zeichen auch füllen? Ich steh wohl gewaltig auf nem Schlauch Gruss Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Hi, nicht ganz. Die Tilde ~ entnimmt Teile einer Zeichenkette. In deine Fall werden 10 Zeichen ab dem 200ten Zeichen entnommen. Ist die Zeichenkette %Fullpath% länger als 200 Zeichen enthält der Rückgabewert etwas und die Bedingung if ("%Fullpath:~199,10%") GTR ("") ist wahr. thorgood Zitieren Link zu diesem Kommentar
Haennerson 10 Geschrieben 11. Januar 2007 Autor Melden Teilen Geschrieben 11. Januar 2007 aha... dann habe ich das Bsp oben zu wenig studiert... nun sollte es klar sein. Danke für die Hilfe! Gruss Haennerson Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Noch eine Hinweis zu dem Script. Enthält der Pfad ein Leerzeichen vor dem 200ten Zeichen wird der Pfad nicht erkannt. So sollte es auch dann gehen: @echo off :: Aufruf beispiel1 [Laufwerk:] for /F [b]"tokens=*"[/b] %%i in ('dir %1\ /b /s') do call :loop %%i goto end :loop set Fullpath=[b]%*[/b] if ("%Fullpath:~199,10%") GTR ("") echo %fullpath% >>d:\groesser200.lst :end thorgood Zitieren Link zu diesem Kommentar
Haennerson 10 Geschrieben 11. Januar 2007 Autor Melden Teilen Geschrieben 11. Januar 2007 Hi thorgood, danke für den Hinweis... dann bringt mir das ganze natürlich nichts. Müsste deine Version nun auch mit Leerzeichen funktionieren? Allerdings verstehe ich nicht, wieso im loop der fullpath auf * gesetzt wird? Gruss Haennerson EDIT: Ja so klappts nun, aber der Stern ist mir immer noch nicht ganz klar (bei tokens schon, nur unten nicht). Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Der %* bedeutet alle übergebenen Parameter. Normalerweise trennen Leerzeichen die Parameter in %1 %2 %3 usw. auf. Gruß thorgood Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Ergänzung bzw. Alternative zu thorgood's Lösung: @echo off :: Aufruf beispiel1 [Laufwerk:] for /F "delims=" %%i in ('dir %1\ /b /s') do call :loop "%%i" goto :eof :loop set Fullpath=%~1 if ("%Fullpath:~199,10%") GTR ("") echo %fullpath% >>d:\groesser200.lst goto :eof @Haennerson: Ich fände das auch guten Stil, die Quelle des Fund-Batches mit anzugeben. Oder, eigentlich noch besser, die Rückfrage direkt in dem Forum zu stellen, in dem dieses Beispiel gepostet war. Pfadtiefe auslesen - administrator Gruß Biber, der auch in anderen Foren diesen Nick hat ;) Im selben Forum habe ich auch nach der oben angegebenen Jugendsünde im Bereich "Batch & Shell" die kleine Tut-Serie "Workshop Batch for Runaways" gepostet. Teil 1 behandelt diese FindLongPath-Klamotte ausführlich. Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 @Biber Schönes Script ;) PS: Wir haben schon 2007 :D Gruß thorgood Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 @thorgood Öhhm... heißt das, ich muss diesen Krempel jetzt auf diese unsägliche PowerShell umstellen? Oder hat M$ seit Vista endlich diese Problemchen mit Pfadlängen jenseits der 250 Zeichen im Griff? :rolleyes: Grüße Biber Zitieren Link zu diesem Kommentar
Das Urmel 10 Geschrieben 11. Januar 2007 Melden Teilen Geschrieben 11. Januar 2007 Öhhm... heißt das, ich muss diesen Krempel jetzt[/Quote] Nö, thorgood meinte das Datum im anderen Forum :) Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 12. Januar 2007 Melden Teilen Geschrieben 12. Januar 2007 *SichvornKoppKlatsch JETZT habe ich es gesehen....*grmpf*.... wie doch die Zeit vergeht.... ...und dennoch .... noch 19 Stunden bis zum Wochenende... Grüße & Danke Biber Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.