Workshop Batch for Runaways - Part I - Beispiel FindLongPath.Bat Bedenklich lange Pfade finden
13.08.2005
05:07:26 Uhr64677 Aufrufe
25 Antworten
05:07:26 Uhr
25 Antworten
Hilfreich +9
Ein paar Batchgrundlagen für Einsteiger und Fortgeschrittene..
Mit viel Prosa und einem bisschen Praxisbezug für den kleinen Admin und die kleine Admine
Mit viel Prosa und einem bisschen Praxisbezug für den kleinen Admin und die kleine Admine
:intro
Ein kleiner Workshop für alle, die vielleicht mal einen Batch mit mehr mit 10 Zeilen schreiben wollen oder müssen...Ich will hier mal versuchen, einige der CMD-Möglichkeiten transparent zu machen, die besonders den "Absolute Beginners" immer so undurchsichtig bleiben. Und trotz alledem vielleicht ein oder zwei Batches hier posten, die auch in der Praxis genutzt werden können. Nur.. wo fang ich an??? Hmmm...okay,
IF "%meinName%"=="Hase" (goto AbsoluteBloodyBeginners) ELSE goto Angeber
:AbsoluteBloodyBeginners
Batch heißt "Stapel" und eine Batchdatei enthält also mehrere Befehle, im Normalfall einen pro Zeile, die nacheinander aufgeführt werden. Welche Befehle es gibt, ist bei Eingave von "help" am CMD-Prompt zu sehen. Eingeben kann man/frau das Ganze mit einem beliebigen Editor, speichert es als Datei mit der Endung *.bat, z.B. MeinErsterBatch.bat ab und ruft es auf durch Eingabe vom "MeinErsterBatch" vom CMD-Prompt.
Variablen kann man/frau auch definieren ("SET Nickname=Biber", sie ändern ("set Nickname=Der %Nickname% aus Bremen") und auch löschen ("set NickName=")
Und es gibt, wenn auch ein wenig spartanisch, ..na ja, nicht zumindest so ganz objektorientiert, alle nötigen Kontrollstrukturen wie
- IF ..ELSE-Verzweigungen,
- FOR..IN..DO-Schleifen und
- die Möglichkeit, Unterroutinen aufzurufen (mittels "call :subxy") oder
- mit einer "GOTO :sprungmarke"-Anweisung den Batch an einer anderen Programmzeile fortzusetzen.
-"Goto :eof" beendet eine Unterroutine oder auch das ganze Programm, entspricht also in etwa dem RETURN aus anderen Programmiersprachen.
- Kommentare und Doku-Zeilen kann ich auch einfügen (Zeilenbeginn mit "REM" oder "::")
Eine Trockenübung noch für die totalen Noobs und dann was Richtiges..
Mal einfach am CMD-Prompt eingeben: ##blue|
##......(alle Inhalte können natürlich je nach Persönlichkeit geändert werden)
..spielen wir doch mal..."Set" zeigt alle Variablen, "Set mein" alle Variablen beginnend mit "mein"..##blue|
:Angeber
Nehmen wir mal lieber ein Beispiel aus dem Leben, ehe das zu trocken wird.. neulich gab es mal eine Herausforderung hier im Forum, die sich auch per Batch lösen läßt.. wir tasten uns mal laaangsam ran.
1) Die Aufgabe
Unter Pfadtiefe auslesen (von Kollege netboarder) steht:
"...Meine Aufgabe ist es einen Report zu erstellen in dem alle Verzeichnisse bzw. Pfade aufgelistet werden die eine Pfadtiefe > 200 Zeichen enthalten..." , eine Frage aus der Praxis, die sich nur auf drei Arten lösen lässt - mit Extra-Tools, durch Praktikanten oder eben mit den Windows-Bordmitteln, also Batch oder Script.
( weiterer Querverweis zu dem Thema Pfadlänge: Pfadtiefe unter verschiedenen Betriebssystemen)
Okay,...mal überlegen, bevor ich anfange, sollte ich am besten einen Plan haben.
2) Den Plan entwickeln .. oder: was weiß ich, was brauche ich und was sollte ich vorher überlegen?
"..einen Report erstellen..".. was will der? Ziel soll doch sein, alle Verzeichnisse mit Pfadlänge größer gleich nnn Zeichen in einer Text-Datei zu haben.. Daraus folgt doch, ich brate mir einen Batch zusammen, der soll heißen *grübel*... FindLongPath.bat, weil ich ja so gut ausländisch kann
und der soll zwei Parameter haben, nämlich "Laufwerk/Pfad" und "Pfadlänge" und die nenne ich *grübelgrübelgrübel*.. ich nenne die p1 und p2
*strahl* und dieser Report soll heißen..am besten so, dass der Name etwas aussagt, also am Besten "f:_PfadeÜber200.txt", wenn nach Pfaden mit Länge größer 200 auf Laufwerk F: gefragt wird.., oder am besten noch den Computernamen dazu, wenn es ein Netzwerk ist.. also "Server0815_f:\_PfadeÜber200.txt" oder so... Hmm, da sind dann aber unerlaubte Zeichen drin.. na, aber sinngemäß geht das. Vielleicht "Server0815_f$_PfadeGTR200.txt" ..lieber auch keine Umlaute.
Dann kann er den aufrufen mit "FindLongPath F: 200" oder "FindLongPath d:\temp 50" zum Testen. und wenn er keinen Parameter eingibt, dann setze ich einen Default. Und wenn ich weiß, mit welchen Parametern ich etwas tun soll und wohin ich es schreibe.. dann suche ich also diese langen Pfade..
*grübel*
Ich suche Verzeichnisse auf Laufwerk X: mit einer bestimmten Pfadlänge, hmmmm.. das ist doch eine Untermenge ALLER Verzeichnisse auf Laufwerk X, und die prüfe ich dann auf ihre Länge ..wie bekomme ich denn alle Verzeichnisse? Ach ja.. das kann ich mit DIR abfackeln. Ich schreibe alle Verzeichnise in eine temporäre Textdatei und dann alle mit der großen Pfadlänge in diese endgültige Reportdatei.
Okay - zusammengefasst, ich habe
FindLongPath.bat (den Namen der Batchdatei) und als Parameter/Variablen
%1 (den Parameter "Laufwerk/Pfad") .... daraus leite ich mir meine Variable p1 ab
%2 (den Parameter "zu prüfende Länge")....daraus leite ich mir meine Variable p2 ab
Ich brauche als als Arbeitsvariablen p1, p2, Reportdatei, Tmpdatei
Die Namen der Reportdatei und der temporären Datei kann ich aus p1 und p2 ableiten.. los gehts.
Und ich will den Batch während der Entstehung "debuggen" können, denn der funktioniert bestimmt nicht beim ersten Mal. Dazu baue ich noch eine DebugShow_vars-Unterrotine ein. Und eine Cleanup-Routine auch. Der Batch besteht also aus den Unterroutinen "ParamCheck", "DebugShow_vars", "Cleanup" .. und einem Hauptteil hoffentlich. Let's go.
Wer diese "Debug-Features" nutzen will, muss VOR dem Aufruf des Batches eingeben
"Set DebugMyBatches=42"
3) Der Batch ...erster Wurf ( Version 0.01 Beta ) ->6.1.2007 0.03 Beta
-- Fortsetzung bei Interesse hier--
Workshop Batch for Runaways - Part II - Ein bisschen Handwerkszeug
Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
...und immer gern empfohlen
Tutorial zur FOR-Schleife von Friemler
Frank / der Biber aus Bremen
Ein kleiner Workshop für alle, die vielleicht mal einen Batch mit mehr mit 10 Zeilen schreiben wollen oder müssen...Ich will hier mal versuchen, einige der CMD-Möglichkeiten transparent zu machen, die besonders den "Absolute Beginners" immer so undurchsichtig bleiben. Und trotz alledem vielleicht ein oder zwei Batches hier posten, die auch in der Praxis genutzt werden können. Nur.. wo fang ich an??? Hmmm...okay,
IF "%meinName%"=="Hase" (goto AbsoluteBloodyBeginners) ELSE goto Angeber
:AbsoluteBloodyBeginners
Batch heißt "Stapel" und eine Batchdatei enthält also mehrere Befehle, im Normalfall einen pro Zeile, die nacheinander aufgeführt werden. Welche Befehle es gibt, ist bei Eingave von "help" am CMD-Prompt zu sehen. Eingeben kann man/frau das Ganze mit einem beliebigen Editor, speichert es als Datei mit der Endung *.bat, z.B. MeinErsterBatch.bat ab und ruft es auf durch Eingabe vom "MeinErsterBatch" vom CMD-Prompt.
Variablen kann man/frau auch definieren ("SET Nickname=Biber", sie ändern ("set Nickname=Der %Nickname% aus Bremen") und auch löschen ("set NickName=")
Und es gibt, wenn auch ein wenig spartanisch, ..na ja, nicht zumindest so ganz objektorientiert, alle nötigen Kontrollstrukturen wie
- IF ..ELSE-Verzweigungen,
- FOR..IN..DO-Schleifen und
- die Möglichkeit, Unterroutinen aufzurufen (mittels "call :subxy") oder
- mit einer "GOTO :sprungmarke"-Anweisung den Batch an einer anderen Programmzeile fortzusetzen.
-"Goto :eof" beendet eine Unterroutine oder auch das ganze Programm, entspricht also in etwa dem RETURN aus anderen Programmiersprachen.
- Kommentare und Doku-Zeilen kann ich auch einfügen (Zeilenbeginn mit "REM" oder "::")
Eine Trockenübung noch für die totalen Noobs und dann was Richtiges..
Mal einfach am CMD-Prompt eingeben: ##blue|
01.
> Set meinNick=Biber 02.
> Set meinPils=Becks 03.
> Set derRest=Schweigen ..spielen wir doch mal..."Set" zeigt alle Variablen, "Set mein" alle Variablen beginnend mit "mein"..##blue|
01.
> Set 02.
> Set mein 03.
> echo Mein Nick ist: %meinNick%, ich trinke %meinPils%. 04.
> if defined meineRente (echo meine Rente ist %meineRente%) else echo MeineRente ist Undefiniert. 05.
> FOR %i IN (meinNick meinPils meineRente derRest) DO @IF DEFINED %i SET %iNehmen wir mal lieber ein Beispiel aus dem Leben, ehe das zu trocken wird.. neulich gab es mal eine Herausforderung hier im Forum, die sich auch per Batch lösen läßt.. wir tasten uns mal laaangsam ran.
1) Die Aufgabe
Unter Pfadtiefe auslesen (von Kollege netboarder) steht:
"...Meine Aufgabe ist es einen Report zu erstellen in dem alle Verzeichnisse bzw. Pfade aufgelistet werden die eine Pfadtiefe > 200 Zeichen enthalten..." , eine Frage aus der Praxis, die sich nur auf drei Arten lösen lässt - mit Extra-Tools, durch Praktikanten oder eben mit den Windows-Bordmitteln, also Batch oder Script.
( weiterer Querverweis zu dem Thema Pfadlänge: Pfadtiefe unter verschiedenen Betriebssystemen)
Okay,...mal überlegen, bevor ich anfange, sollte ich am besten einen Plan haben.
2) Den Plan entwickeln .. oder: was weiß ich, was brauche ich und was sollte ich vorher überlegen?
"..einen Report erstellen..".. was will der? Ziel soll doch sein, alle Verzeichnisse mit Pfadlänge größer gleich nnn Zeichen in einer Text-Datei zu haben.. Daraus folgt doch, ich brate mir einen Batch zusammen, der soll heißen *grübel*... FindLongPath.bat, weil ich ja so gut ausländisch kann
*strahl* und dieser Report soll heißen..am besten so, dass der Name etwas aussagt, also am Besten "f:_PfadeÜber200.txt", wenn nach Pfaden mit Länge größer 200 auf Laufwerk F: gefragt wird.., oder am besten noch den Computernamen dazu, wenn es ein Netzwerk ist.. also "Server0815_f:\_PfadeÜber200.txt" oder so... Hmm, da sind dann aber unerlaubte Zeichen drin.. na, aber sinngemäß geht das. Vielleicht "Server0815_f$_PfadeGTR200.txt" ..lieber auch keine Umlaute.
Dann kann er den aufrufen mit "FindLongPath F: 200" oder "FindLongPath d:\temp 50" zum Testen. und wenn er keinen Parameter eingibt, dann setze ich einen Default. Und wenn ich weiß, mit welchen Parametern ich etwas tun soll und wohin ich es schreibe.. dann suche ich also diese langen Pfade..
*grübel*
Ich suche Verzeichnisse auf Laufwerk X: mit einer bestimmten Pfadlänge, hmmmm.. das ist doch eine Untermenge ALLER Verzeichnisse auf Laufwerk X, und die prüfe ich dann auf ihre Länge ..wie bekomme ich denn alle Verzeichnisse? Ach ja.. das kann ich mit DIR abfackeln. Ich schreibe alle Verzeichnise in eine temporäre Textdatei und dann alle mit der großen Pfadlänge in diese endgültige Reportdatei.
Okay - zusammengefasst, ich habe
FindLongPath.bat (den Namen der Batchdatei) und als Parameter/Variablen
%1 (den Parameter "Laufwerk/Pfad") .... daraus leite ich mir meine Variable p1 ab
%2 (den Parameter "zu prüfende Länge")....daraus leite ich mir meine Variable p2 ab
Ich brauche als als Arbeitsvariablen p1, p2, Reportdatei, Tmpdatei
Die Namen der Reportdatei und der temporären Datei kann ich aus p1 und p2 ableiten.. los gehts.
Und ich will den Batch während der Entstehung "debuggen" können, denn der funktioniert bestimmt nicht beim ersten Mal. Dazu baue ich noch eine DebugShow_vars-Unterrotine ein. Und eine Cleanup-Routine auch. Der Batch besteht also aus den Unterroutinen "ParamCheck", "DebugShow_vars", "Cleanup" .. und einem Hauptteil hoffentlich. Let's go.
Wer diese "Debug-Features" nutzen will, muss VOR dem Aufruf des Batches eingeben
"Set DebugMyBatches=42"
3) Der Batch ...erster Wurf ( Version 0.01 Beta ) ->6.1.2007 0.03 Beta
01.
::---------begin ofFindLongPath.bat ------- 02.
:: Aufruf FindLongPath [Lw:/Pfad] [Pfadlänge] -- Default Lw:/Pfad=%temp% -- Default Pfadlänge = 50 03.
@ECHO off & SETLOCAL ENABLEEXTENSIONS 04.
SET usedvars=tmpdatei reportdatei p1 p1masked p2 x YN PAUSE_D ECHO_D 05.
if Defined DebugMyBatches ((set ECHO_D=@ECHO) & (set PAUSE_D=pause) ) else ( set ECHO_D=REM) 06.
REM call :Debugshow_vars "Am Start der Batchdatei" ...bei Bedarf das REM entfernen 07.
CALL :paramcheck %1 %2 08.
:: Nicht einfach weiterlesen... hast Du geguckt, was in :paramcheck passiert??? 09.
DIR %p1% /aD /b /s >%tmpdatei% 10.
IF exist "%reportdatei%" del "%reportdatei%" 11.
SET /a p2=%p2%-1 12.
SETLOCAL EnableDelayedExpansion 13.
FOR /F "delims=" %%i in (%tmpdatei%) do (set "x=%%i") && if "!x:~%p2%,10!" GTR "@" @echo %%i >>%reportdatei% 14.
15.
IF EXIST "%reportdatei%" ( 16.
ECHO Report wurde gespeichert als %reportdatei%. 17.
ECHO - Reportdatei vom %date% -- Alle Verzeichnisse ^>%p2% auf %p1% -->>"%reportdatei%" 18.
ECHO - Reportdatei "%reportdatei%" -->>"%reportdatei%" 19.
SET /p YN="Auf %p1% wurden Pfade mit Länge größer %p2% gefunden. Anzeigen (J/N?) " 20.
IF /i "!YN!"=="J" TYPE "%reportdatei%" |MORE 21.
) ELSE ( 22.
ECHO Keine Pfade länger als %p2% Zeichen im Pfad %p1% gefunden. 23.
) 24.
ENDLOCAL 25.
CALL :DebugShow_vars 26.
CALL :cleanup 27.
GOTO :eof 28.
:: ------------------- 29.
:::::::::::: ParamCheck ... Hier werden die Parameter %1 und %2 geprüft daraus %p1% und %p2% abgeleitet. 30.
:: Param 1 : Laufwerksbuchstabe oder Verzeichnis; Default %temp% 31.
:::::::::::: Dieser Parameter wird als Substring in den Variablen %tmpdatei% und %reportdatei% verwendet 32.
:::::::::::: Dafür werden ":" und "\" durch "$" und"_" ersetzt, um einen gültigen Dateinamen zu bilden. 33.
:::::::::::: dazu Zwischenspeicherung in Variable %p1% und %p1masked% 34.
:::::::::::: Syntax dazu siehe SET /? und dort.. %PATH:str1=str2% 35.
:: Param 2:: zu prüfende Länge der Verzeichnisse ... Default 50 36.
37.
:ParamCheck 38.
IF (%1)==() (SET p1=%temp%) ELSE (SET p1=%1) 39.
REM nächste Zeile bipede-Variante - siehe unten 40.
IF (%1)==() (SET p1=C:) ELSE (SET p1=%1) 41.
IF (%2)==() (SET /a p2=50 ) ELSE (SET /a p2=%2) 42.
SET p1masked=%p1::=$% 43.
SET p1masked=%p1masked:\=_% 44.
%ECHO_D% p1-^>p1masked ist %p1%-^>%p1masked%; p2 ist %p2% 45.
SET "tmpdatei=%temp%\%computername%_%p1masked%_All.lst" 46.
SET "Reportdatei=%temp%\%computername%_%p1masked%_PfadeGTR%p2%.lst" 47.
CALL :Debugshow_vars "Nach Var-Setzen" 48.
goto :eof 49.
:: -------------------- 50.
:DebugShow_vars 51.
IF DEFINED DebugMyBatches ( 52.
SETLOCAL ENABLEDELAYEDEXPANSION 53.
FOR %%i IN (%usedvars%) DO (ECHO [%~1] Variable %%i="!%%i!" ) 54.
ENDLOCAL 55.
PAUSE 56.
) 57.
GOTO :eof 58.
:: ----------------- 59.
:cleanup 60.
%ECHO_D% in Subroutine :Cleanup 61.
IF EXIST "%tmpdatei%" (del "%tmpdatei%") & %ECHO_D% Datei %tmpdatei% wird gelöscht. 62.
FOR %%i IN (%usedvars% usedvars) DO @IF DEFINED %%i ( 63.
(IF DEFINED DebugMyBatches echo %%i wird freigegeben) & (SET %%i=)) 64.
65.
GOTO :eof 66.
::---------End of FindLongPath.bat --------- Fortsetzung bei Interesse hier--
Workshop Batch for Runaways - Part II - Ein bisschen Handwerkszeug
Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
...und immer gern empfohlen
Tutorial zur FOR-Schleife von Friemler
Frank / der Biber aus Bremen
bipede schreibt am 05.01.2007 um 14:15:23 Uhr
Hi,
ich wollte das Batch-Skript gerade verwenden. Um keine Parameter übergeben zu müssen habe ich einfach den Default-Wert für den Pfad zu "C:" geändert:
Es klappt leider nicht, es heißt nur "Gerät ist nicht bereit". Das Spript habe ich vom Desktop aus gestartet (Doppelklick).
Irgendein Tipp? Ich verwende XP auf einem Samsung R40 Laptop.
Grüße
manu
ich wollte das Batch-Skript gerade verwenden. Um keine Parameter übergeben zu müssen habe ich einfach den Default-Wert für den Pfad zu "C:" geändert:
01.
------------------------------------ 02.
:ParamCheck 03.
IF (%1)==() (SET p1=C:) ELSE (SET p1=%1) 04.
------------------------------------Irgendein Tipp? Ich verwende XP auf einem Samsung R40 Laptop.
Grüße
manu
Biber schreibt am 05.01.2007 um 15:07:24 Uhr
Moin bipede,
willkommen im Forum.
Ich habe noch einen Bugfix nachgezogen, der im Nachfolge-Tut "Workshop Batch for Runaways Part II - Ein bisschen Handwerkszeug" beschrieben wurde. Ich hatte mich damals nicht getraut, diesen Beitrag zu editieren, weil ein anderes meiner Tuts nach dem Editieren gar nicht mehr angezeigt wurde.
Ist jetzt oben eingebaut und nun sollte es laufen.
Okay, das sagen alle.
Wenn also nicht: Dann rufe das Skriptchen bitte über den CMD-Prompt auf und setze vorher
Set DebugMyBatches=wattDuWillst
Dann schauen wir weiter.
Grüße
Biber
willkommen im Forum.
Ich habe noch einen Bugfix nachgezogen, der im Nachfolge-Tut "Workshop Batch for Runaways Part II - Ein bisschen Handwerkszeug" beschrieben wurde. Ich hatte mich damals nicht getraut, diesen Beitrag zu editieren, weil ein anderes meiner Tuts nach dem Editieren gar nicht mehr angezeigt wurde.
Ist jetzt oben eingebaut und nun sollte es laufen.
Okay, das sagen alle.
Wenn also nicht: Dann rufe das Skriptchen bitte über den CMD-Prompt auf und setze vorher
Set DebugMyBatches=wattDuWillst
Dann schauen wir weiter.
Grüße
Biber
bipede schreibt am 05.01.2007 um 15:34:45 Uhr
Hi, Danke. Die Reportdatei wird auf Laufwerk D gespeichert, das ist bei mir ein DVD-Laufwerk. Nachdem ich folgende Änderung vorgenommen habe
SET "Reportdatei=c:\%computername%_%p1masked%_PfadeGTR%p2%.lst"
klappt es. Die Reportdatei wird jetzt einfach im C-Laufwerk gespeichert.
Eher unwichtig:
Darf man denn die Endung in "txt" umändern?
Grüße und vielen Dank von der Dummie-Front
manu
SET "Reportdatei=c:\%computername%_%p1masked%_PfadeGTR%p2%.lst"
klappt es. Die Reportdatei wird jetzt einfach im C-Laufwerk gespeichert.
Eher unwichtig:
Darf man denn die Endung in "txt" umändern?
Grüße und vielen Dank von der Dummie-Front
manu
Biber schreibt am 05.01.2007 um 15:43:50 Uhr
Na, dann bin ich beruhigt, bipede,
Das einzige, was mit der gemacht wird, ist ein TYPE %reportdatei% .. und da ist die Endung beliebig.
Die Endung wäre nur dann von Belang, wenn Du die Datei über "Start %reportdatei%" mit der "richtigen" bzw. zugeordneten Applikation starten würdest... also eine .txt-Datei mit NotePad.exe öffnen oder eine Datei mit der Endung .HTML über den Explorer.
Grüße
Biber
-----------
[Edit] Einen Tag später....
Noch mal über den gemeldeten Bug nachgedacht und ...*vornKoppKlatsch* im Source stand tatsächlich:
SET "Reportdatei=d:\temp\%computername%_%p1masked%_PfadeGTR%p2%.lst"
-statt-
SET "Reportdatei=%temp%\%computername%_%p1masked%_PfadeGTR%p2%.lst"
D:\Temp entspricht auch tatsächlich meinem %temp%-Verzeichnis, aber bei anderen kann ja das Laufwerk D: auch ein CD-Laufwerk sein.
Na ja, nun ist es oben die Version 0.03.
Danke nochmal an bipede.
[/Edit]
Eher unwichtig:
Darf man denn die Endung in "txt" umändern?
Klar, die Endung der Report-Datei ist hier vollkommen unwichtig.Darf man denn die Endung in "txt" umändern?
Das einzige, was mit der gemacht wird, ist ein TYPE %reportdatei% .. und da ist die Endung beliebig.
Die Endung wäre nur dann von Belang, wenn Du die Datei über "Start %reportdatei%" mit der "richtigen" bzw. zugeordneten Applikation starten würdest... also eine .txt-Datei mit NotePad.exe öffnen oder eine Datei mit der Endung .HTML über den Explorer.
Grüße
Biber
-----------
[Edit] Einen Tag später....
Noch mal über den gemeldeten Bug nachgedacht und ...*vornKoppKlatsch* im Source stand tatsächlich:
SET "Reportdatei=d:\temp\%computername%_%p1masked%_PfadeGTR%p2%.lst"
-statt-
SET "Reportdatei=%temp%\%computername%_%p1masked%_PfadeGTR%p2%.lst"
D:\Temp entspricht auch tatsächlich meinem %temp%-Verzeichnis, aber bei anderen kann ja das Laufwerk D: auch ein CD-Laufwerk sein.
Na ja, nun ist es oben die Version 0.03.
Danke nochmal an bipede.
[/Edit]
AD schreibt am 12.02.2007 um 20:25:52 Uhr
Hallo Biber,
klasse Tutorial, habe auch ein "Big Problem", es wurde ausversehen in ein Verzeichnis mehere Unterverzeichnisse erstellt ohne weiteren Inhalt. Nun ist die Tiefe der Verzeichnisse schon so tief, dass die Größe von 256 Zeichen überschritten wurde. Hast du oder ein andere eine Idee wie ich diese Verzeichnisse gelöscht bekomme? Da es sich ja um Windows 2003 Server handelt ist es ja ab 256 Zeichen im Explorer vorbei, gibt es eine möglichkeit per script diese Verzeichnisse zu löschen (D:\public\Allgemein\Backup\Backup\Backup\Backup\Backup\Backup\Backup\Backup)?
Danke im Vorraus
Gruß Michael
klasse Tutorial, habe auch ein "Big Problem", es wurde ausversehen in ein Verzeichnis mehere Unterverzeichnisse erstellt ohne weiteren Inhalt. Nun ist die Tiefe der Verzeichnisse schon so tief, dass die Größe von 256 Zeichen überschritten wurde. Hast du oder ein andere eine Idee wie ich diese Verzeichnisse gelöscht bekomme? Da es sich ja um Windows 2003 Server handelt ist es ja ab 256 Zeichen im Explorer vorbei, gibt es eine möglichkeit per script diese Verzeichnisse zu löschen (D:\public\Allgemein\Backup\Backup\Backup\Backup\Backup\Backup\Backup\Backup)?
Danke im Vorraus
Gruß Michael
Biber schreibt am 12.02.2007 um 21:03:27 Uhr
Moin AD,
im Explorer ist beim Anlegen und beim Hin-Kopieren bei 256 Zeilen Schluss, beim Lesen und beim Zurückkopieren bei 254..
Wenn Du zwischenzeitlich Programm aus der xxACLs-Schiene benutzt - die hauen bei 250 bis 253 Zeichen ins Mett...
Aber das löst Dein Problem ja nicht.
Also, wenn Du auf dem Server agieren kannst mit den nötigen Rechten, dann ist es einfach.
Rezept ist simpel: Den langen Pfad kürzer machen.
Zwei Strategien:
- > die simpelste: Mach ein Subst auf einen Teilpfad
-> oder (wenn in den tieferen Ebenen noch Daten sein sollten)
Dann benenn die Teil-Unterordner per Batch oder von Hand um von "Backup" in "B".
Übrigens - in den grafischen Oberflächen entstehen interessante Effekte bei so langen Pfaden, gell? *g
Gruss
Biber
P.S. Wenn Du öfters Kommentare von mir liest, wirst Du merken, dass ich die Formulierung "Danke im Vorraus" total lieb habe....
im Explorer ist beim Anlegen und beim Hin-Kopieren bei 256 Zeilen Schluss, beim Lesen und beim Zurückkopieren bei 254..
Wenn Du zwischenzeitlich Programm aus der xxACLs-Schiene benutzt - die hauen bei 250 bis 253 Zeichen ins Mett...
Aber das löst Dein Problem ja nicht.
Also, wenn Du auf dem Server agieren kannst mit den nötigen Rechten, dann ist es einfach.
Rezept ist simpel: Den langen Pfad kürzer machen.
Zwei Strategien:
- > die simpelste: Mach ein Subst auf einen Teilpfad
Subst w: D:\public\Allgemein\Backup\Backup\Backup\Backup
rd /s /q w:\Backup
rd /s /q w:\Backup
-> oder (wenn in den tieferen Ebenen noch Daten sein sollten)
Dann benenn die Teil-Unterordner per Batch oder von Hand um von "Backup" in "B".
Übrigens - in den grafischen Oberflächen entstehen interessante Effekte bei so langen Pfaden, gell? *g
Gruss
Biber
P.S. Wenn Du öfters Kommentare von mir liest, wirst Du merken, dass ich die Formulierung "Danke im Vorraus" total lieb habe....
AD schreibt am 12.02.2007 um 21:22:27 Uhr
Hallo Biber,
danke für deine schnelle Antwort. Ich werde es sofort probieren. Deine Vorliebe was die beiden Worte betreffen, habe ich in einen von mir vorher verfassten Kommentar eingebracht. Dieser ging mir aber leider wegen einer längeren Pause (meine kleine Tochter) verloren. m der zweiten Fassung habe ich Ihn dann irgendwie vergessen. Ich hoffe du kannst mir verzeihen.
Danke im Vorraus
Gruß AD
danke für deine schnelle Antwort. Ich werde es sofort probieren. Deine Vorliebe was die beiden Worte betreffen, habe ich in einen von mir vorher verfassten Kommentar eingebracht. Dieser ging mir aber leider wegen einer längeren Pause (meine kleine Tochter) verloren. m der zweiten Fassung habe ich Ihn dann irgendwie vergessen. Ich hoffe du kannst mir verzeihen.
Danke im Vorraus
Gruß AD
TuXHunt3R schreibt am 25.06.2007 um 12:29:34 Uhr
Guten Tag
1. Danke an den Biber für diesen Batch. Ich wollte schon lange so etwas realisieren und habe hier endlich einen Denkansatz gefunden.
2. Ich habe mir erlaubt, den Batch ein bisschen besser zu strukturieren und zu entschlacken. Da die Version von Biber fast gar nicht auskommentiert war, habe ich diese Ergänzungen vorgenommen
Hier meine Version des Batches:
1. Danke an den Biber für diesen Batch. Ich wollte schon lange so etwas realisieren und habe hier endlich einen Denkansatz gefunden.
2. Ich habe mir erlaubt, den Batch ein bisschen besser zu strukturieren und zu entschlacken. Da die Version von Biber fast gar nicht auskommentiert war, habe ich diese Ergänzungen vorgenommen
Hier meine Version des Batches:
01.
::***************************************************************** 02.
::* LongPath.bat * 03.
::* =========== * 04.
::* Listet extrem lange Pfade * 05.
::* auf einem Laufwerk oder Share auf * 06.
::* Herzlichen Dank an Biber (Forenmitglied bei administrator.de) * 07.
::* History: * 08.
::* 20.06.2007 - New Batch * 09.
::* 25.06.2007 - Batch finalisiert * 10.
::***************************************************************** 11.
12.
@ECHO off 13.
cls 14.
15.
::----------------------------------------------------------------- 16.
::Parameter-Abfragen 17.
18.
if "%1"=="" goto manual 19.
if "%1%"=="" goto Manual 20.
if "%1%"=="?" goto Manual 21.
if "%1%"=="/?" goto Manual 22.
if "%1%"=="-?" goto Manual 23.
if "%1%"=="-h" goto Manual 24.
if "%1%"=="--h" goto Manual 25.
if "%1%"=="-help" goto Manual 26.
if "%1%"=="--help" goto Manual 27.
if "%1%"=="help" goto Manual 28.
29.
::Setze Variablen 30.
SET usedvars=tmpdatei reportdatei p1 p1masked p2 x YN PAUSE_D ECHO_D 31.
32.
set p1=%1 33.
::Falls keine Längenangabe gemacht wird, wird die Länge auf 256 gesetzt 34.
IF (%2)==() (SET /a p2=256 ) ELSE (SET /a p2=%2) 35.
::Ersetze Zeichen, die nicht in Dateinamen dürfen (/\:*?"<>|) durch andere 36.
SET p1masked=%p1::=$% 37.
SET p1masked=%p1masked:\=_% 38.
::%ECHO_D% p1-^>p1masked ist %p1%-^>%p1masked%; p2 ist %p2% 39.
::Setze Variablen für die Logfiles 40.
SET "tmpdatei=%systemroot%\temp\longpath\dir_%p1masked%.txt" 41.
SET "Reportdatei=%systemroot%\temp\longpath\report_%p1masked%_Pfade-groesser-%p2%.lst" 42.
::----------------------------------------------------------------- 43.
44.
::----------------------------------------------------------------- 45.
::Vorhergehende Aufgaben 46.
47.
::Überprüeft, ob bereits ein Ordner für die Logfiles existiert 48.
if exist %systemroot%\temp\longpath ( 49.
rmdir /s /q %systemroot%\temp\longpath 50.
) 51.
52.
::Erstelle Ordner für Logfiles 53.
mkdir %systemroot%\temp\longpath 54.
::----------------------------------------------------------------- 55.
56.
::----------------------------------------------------------------- 57.
echo Longpath.bat 58.
echo ========== 59.
echo. 60.
::Überprüft, ob der angegebene Ordner existiert. Falls ja, listet der Batch alle Pfade auf 61.
62.
If not exist %1 ( 63.
echo Der Pfad %1 existiert nicht! 64.
echo. 65.
goto end 66.
) else ( 67.
echo Die Pfadlaengen-Abfrage von %1 wurde gestartet... 68.
echo. 69.
dir /s /b %1 >>%tmpdatei% 70.
echo Index wurde erstellt, Pfade werden gefiltert... 71.
) 72.
::----------------------------------------------------------------- 73.
74.
::----------------------------------------------------------------- 75.
::Filtert das File %tmpdatei% nach langen Pfadnamen 76.
SETLOCAL EnableDelayedExpansion 77.
FOR /F "delims=" %%i in (%tmpdatei%) do (set "x=%%i") && if "!x:~%p2%,10!" GTR "@" @echo %%i >>%reportdatei% 78.
79.
if exist %reportdatei% ( 80.
echo. >>%reportdatei% 81.
echo ---------------------------- >>%reportdatei% 82.
echo Report des Batches "Longpath" >>%reportdatei% 83.
echo ----------------------------- >>%reportdatei% 84.
echo Ausgefuehrt am %date% von %username% >>%reportdatei% 85.
echo Ordner: %p1% >>%reportdatei% 86.
echo Gefilterte maximale Pfadlaenge: %p2% >>%reportdatei% 87.
echo In %1 wurden Pfade mit Laenge groesser %p2% gefunden! 88.
choice /c:JN Sollen die Ergebnisse in Notepad angezeigt werden? 89.
if errorlevel 1 notepad %reportdatei% 90.
) else ( 91.
echo In %p1% wurden keine Pfade mit Laenge groesser %p2% gefunden! 92.
echo. 93.
) 94.
ENDLOCAL 95.
::----------------------------------------------------------------- 96.
97.
goto end 98.
99.
100.
101.
:Manual 102.
echo Longpath.bat 103.
echo ========== 104.
echo. 105.
echo Listet alle Pfade auf, die laenger sind als die angegebene Laenge. 106.
echo. 107.
echo. 108.
echo Starte Batch folgendermassen: 109.
echo Fatpath Pfad Pfadlaenge 110.
echo. 111.
echo. 112.
echo Beispiele: 113.
echo Longpath \\server\share$\ordner1\ordner2 200 114.
echo. 115.
echo ==^> Listet alle Pfade in \\server\share$\ordner1\ordner2 auf, 116.
echo die laenger als 200 Zeichen sind. 117.
echo. 118.
echo Falls nicht angegeben wird, wie lange der Pfad sein darf, 119.
echo geht Longpath davon aus, dass eine Pfadlaenge von 256 Zeichen gemeint ist. 120.
echo. 121.
echo Hier einige Angaben zu der maximal erlaubten Pfadlaenge von verschiedenen Dateitypen: 122.
echo .doc --^> 123.
echo .xls --^> 218 Zeichen 124.
echo .ppt --^> 125.
echo .pdf --^> 126.
echo .pst --^> 127.
echo. 128.
129.
:end 130.
Biber schreibt am 28.06.2007 um 12:06:54 Uhr
Moin TuXHunt3R,
sorry, ich habe Deinen Kommentar eben erst entdeckt.
Erstmal danke für das Wiederbeleben des FindlongPath-Beispiels.
Und Recht hast Du... der war ja auch von mir eher ein bisschen verspielt und for educational purposes angelegt.
Und eigentlich nicht als wartbarer Produktivbatch.
Von daher finde ich Deine Variante sinnvoll und bedanke mich dafür.
Ändern/prüfen würde ich noch:
-> die ganzen Zeilen mit dem Prozentzeichen nach der "1" kämen auch ohne das letzte %-Zeichen aus.
Und das "goto end" und die Sprungmarke ":end" würde ich aus heutiger Sicht durch ein "goto :eof" (ohne Sprungmarke) ersetzen.
Viele Grüße
Biber
sorry, ich habe Deinen Kommentar eben erst entdeckt.
Erstmal danke für das Wiederbeleben des FindlongPath-Beispiels.
Und Recht hast Du... der war ja auch von mir eher ein bisschen verspielt und for educational purposes angelegt.
Und eigentlich nicht als wartbarer Produktivbatch.
Von daher finde ich Deine Variante sinnvoll und bedanke mich dafür.
Ändern/prüfen würde ich noch:
01.
.. 02.
if "%1"=="" goto manual 03.
if "%1%"=="" goto Manual 04.
if "%1%"=="?" goto Manual 05.
if "%1%"=="/?" goto Manual 06.
if "%1%"=="-?" goto Manual 07.
if "%1%"=="-h" goto Manual 08.
if "%1%"=="--h" goto Manual 09.
if "%1%"=="-help" goto Manual 10.
if "%1%"=="--help" goto Manual 11.
if "%1%"=="help" goto Manual-> die ganzen Zeilen mit dem Prozentzeichen nach der "1" kämen auch ohne das letzte %-Zeichen aus.
Und das "goto end" und die Sprungmarke ":end" würde ich aus heutiger Sicht durch ein "goto :eof" (ohne Sprungmarke) ersetzen.
Viele Grüße
Biber
Biber schreibt am 16.01.2008 um 13:39:42 Uhr
Tut mir leid - ich kann es mir einfach nicht verkneifen, auch wenn der Thread schon so alt ist.
Also: Lieblingsworte sollte man richtig schreiben: "Voraus" kommt von "vor" und "aus" und nicht von "vor und "raus".
Also: "Danke im voraus" und nicht "Danke im Vorraus".
Ich bin eigentlich kein Orthografiefanatiker, aber wenn man schon so drauf gestossen wird...
Also: Lieblingsworte sollte man richtig schreiben: "Voraus" kommt von "vor" und "aus" und nicht von "vor und "raus".
Also: "Danke im voraus" und nicht "Danke im Vorraus".
Ich bin eigentlich kein Orthografiefanatiker, aber wenn man schon so drauf gestossen wird...
TuXHunt3R schreibt am 16.01.2008 um 20:33:25 Uhr
@ Biber
Da hast du schon recht, es reicht auch ein %1
Das goto :eof brauche ich eben häufig bei For-Schleifen, nach dem goto :end packe ich bei manchen Batchs noch ein kleines echo à la "echo Coded 2008 by TuXHunT3R" oder so was ähnliches hin. Ist mehr eine Stilfrage.
-> die ganzen Zeilen mit dem Prozentzeichen nach der "1" kämen auch ohne das letzte %-Zeichen aus.
Da hast du schon recht, es reicht auch ein %1
Und das "goto end" und die Sprungmarke ":end" würde ich aus heutiger Sicht durch ein "goto :eof" (ohne Sprungmarke) ersetzen.
Das goto :eof brauche ich eben häufig bei For-Schleifen, nach dem goto :end packe ich bei manchen Batchs noch ein kleines echo à la "echo Coded 2008 by TuXHunT3R" oder so was ähnliches hin. Ist mehr eine Stilfrage.
bipede schreibt am 11.12.2008 um 23:59:26 Uhr
Hallo und Danke - habe es mal runtergeladen.
Grüße!
manu
Nachtrag: Habe es installiert - aber unter C:\Programme\Support Tools gibt es choice.exe nicht - anyway - auf http://winsupport.org/utilities/freedos-c ... gab es ne Freeware die wohl auch funktioniert.
Grüße!
manu
Nachtrag: Habe es installiert - aber unter C:\Programme\Support Tools gibt es choice.exe nicht - anyway - auf http://winsupport.org/utilities/freedos-c ... gab es ne Freeware die wohl auch funktioniert.
kleinerbub schreibt am 17.01.2009 um 01:12:32 Uhr
Hi Biber,
danke für die Batch (ich weiß, is schon alt, aber aus aktuellem Anlass bin ich drüber gestolpert)!
Ich hätt mal noch ne Spezialfrage für die Profis unter den Batchern:
Ich hab n Skript, welches nacheinander Netzlaufwerke zu verschiedenen Servern verbindet und Verzeichnisse darüber sichert. Nun kam es vor, dass die maximale Pfadlänge überschritten wurde, wobei xcopy einfach abbricht (nebenbei such ich noch ne Möglichkeit diese Fehler zu loggen, weil man das sonst garnich gleich mitkriegt).
Jetz wärs cool, wenn ich vorher die Pfade auf Länge überprüfen lassen könnte und die zu langen Pfade in Kurzform (Option /N) kopieren lasse.
Wäre nett, wenn sich einer mit mir auf Lösungssuche begibt...
edit: Vielleicht mal noch ein Auszug aus meinem Sicherungsscript:
danke für die Batch (ich weiß, is schon alt, aber aus aktuellem Anlass bin ich drüber gestolpert)!
Ich hätt mal noch ne Spezialfrage für die Profis unter den Batchern:
Ich hab n Skript, welches nacheinander Netzlaufwerke zu verschiedenen Servern verbindet und Verzeichnisse darüber sichert. Nun kam es vor, dass die maximale Pfadlänge überschritten wurde, wobei xcopy einfach abbricht (nebenbei such ich noch ne Möglichkeit diese Fehler zu loggen, weil man das sonst garnich gleich mitkriegt).
Jetz wärs cool, wenn ich vorher die Pfade auf Länge überprüfen lassen könnte und die zu langen Pfade in Kurzform (Option /N) kopieren lasse.
Wäre nett, wenn sich einer mit mir auf Lösungssuche begibt...
edit: Vielleicht mal noch ein Auszug aus meinem Sicherungsscript:
01.
if exist N:\nul net use /delete N: 02.
03.
set param=/C /E /F /H /R /Y 04.
set info=PW /user:User 05.
set ID=1 06.
07.
:Server1 08.
set server=server1 09.
set Verz1=\d$ 10.
set Ziel1=BACKUP\server1 11.
GOTO Server_Start 12.
13.
:Server2 14.
set server=server2 15.
set Verz1=\d$ 16.
set Verz2=\e$ 17.
set Ziel1=BACKUP\server2_D 18.
set Ziel2=BACKUP\server2_E 19.
GOTO Server_Start 20.
21.
:Server3 22.
GOTO Complete 23.
24.
:Server_Start 25.
net use N: \\%server%%Verz1% %info% 26.
IF NOT %errorlevel% == 0 ( 27.
echo Die Netzwerkverbindung zu %server%%Verz1% konnte nicht hergestellt werden.>> C:\DS\Logfiles\%logname%.log 28.
) ELSE ( 29.
xcopy N:\*.* E:\%1\%Ziel1%\*.* %param% 30.
net use /delete N: 31.
IF NOT %errorlevel% == 0 echo Fehler beim Kopiervorgang.>> C:\DS\Logfiles\%logname%.log 32.
) 33.
34.
IF not defined Verz2 ( 35.
GOTO Server_Done 36.
) ELSE ( 37.
net use N: \\%server%%Verz2% %info% 38.
IF NOT %errorlevel% == 0 ( 39.
echo Die Netzwerkverbindung zu %server%%Verz2% konnte nicht hergestellt werden.>> C:\DS\Logfiles\%logname%.log 40.
) ELSE ( 41.
xcopy N:\*.* E:\%1\%Ziel2%\*.* %param% 42.
net use /delete N: 43.
IF NOT %errorlevel% == 0 echo Fehler beim Kopiervorgang.>> C:\DS\Logfiles\%logname%.log 44.
) 45.
) 46.
47.
:Server_Done 48.
set Verz1= 49.
set Verz2= 50.
set Ziel1= 51.
set Ziel2= 52.
set param=/C /E /F /H /R /Y 53.
set /a ID=%ID%+1 54.
GOTO Server%ID% 55.
56.
57.
:Complete 58.
if exist N:\nul net use /delete N:
Biber schreibt am 17.01.2009 um 14:34:25 Uhr
Moin kleinerbub,
danke für das Feedback.
Deine Fragen möchte ich ein bisschen anders beantworten, als Du vielleicht erhofft hast...
a) XCopy-Abbrüche und XCopy-Log...
Hmmja, gibt es laut XCopy-Hilfe alles, auch einen so genannten "restartable mode" und ein "mach weiter bei Fehlern"... aber:
b) Pfade kürzen und als kurze Namen kopieren (/N-Option)
Never. No way. Was nützt Dir eine tägliche, stündliche oder atomzeitgenaue Serversicherung, bei der Dir Detailinfos wie Pfad- und Dateinamen verloren gehen? No no no...
c) falls Du nur zwei Minuten Aufwand investieren willst und "erstmal" bei XCopy bleiben möchtest, dann wäre meine Strategie und meine Empfehlung wie folgt:
Beispiel in Deinem Schnipsel:
Ein weiterer präventiver Schritt sollte allerdings sein, mit Skript und mit Deinen Endusern zusammen mal hin und wieder die "bedenklich langen Dateinamen" zu suchen - mit willkürlicher Max-Längen-Vorgabe von Dir. Und die gemeinsam auf kürzere Pfade/Namen zu bringen. Keine automatische Verstümmelung durch /N oder so was.
Grüße
Biber
danke für das Feedback.
Deine Fragen möchte ich ein bisschen anders beantworten, als Du vielleicht erhofft hast...
a) XCopy-Abbrüche und XCopy-Log...
Hmmja, gibt es laut XCopy-Hilfe alles, auch einen so genannten "restartable mode" und ein "mach weiter bei Fehlern"... aber:
- eine oberflächliche Suche im Netz nach "xcopy Fehler" oder "xcopy bugs" liefert definitiv genug, um XCopy aus allen Mach-mir-ein-Serverbackup-Phantasien zu verbannen. Nimm Robocopy.exe (oder professionelleres).
b) Pfade kürzen und als kurze Namen kopieren (/N-Option)
Never. No way. Was nützt Dir eine tägliche, stündliche oder atomzeitgenaue Serversicherung, bei der Dir Detailinfos wie Pfad- und Dateinamen verloren gehen? No no no...
c) falls Du nur zwei Minuten Aufwand investieren willst und "erstmal" bei XCopy bleiben möchtest, dann wäre meine Strategie und meine Empfehlung wie folgt:
- im Moment liest Du die Quell-Pfade+Dateinamen von einem Laufwerk "N:\". Dort kannst Du alles lesen (keine zu langen Pfade etc)
- im Moment kopierst Du in ein Zielverzeichnis "xcopy N:\*.* E:\%1\%Ziel1%\*.* , also ausführlich geschrieben ein Unterverzeichniszweig, der 20 oder 25 Zeichen länger ist als die Länge des Quellpfades (der ist ja "N:\")
- also: Wenn Du einen Pfad kopierst, der exakt genauso lang ist wie der (problemlos lesbare) Quell-Pfad, dann ist doch kein Problem mehr zu erwarten.
- Also mache folgendes: Suche Dir einen freien Lw-Buchstaben (meinetwegen Z: wie Ziel).
- Und definiere das Zielverzeichnis mit SUBST.exe jeweils als logisches Laufwerk Z:.
Beispiel in Deinem Schnipsel:
01.
..... 02.
:Server_Start 03.
net use N: \\%server%%Verz1% %info% 04.
05.
IF NOT %errorlevel% == 0 ( 06.
echo Die Netzwerkverbindung zu %server%%Verz1% konnte nicht hergestellt werden.>> C:\DS\Logfiles\%logname%.log 07.
) ELSE ( 08.
REM Erstes Ziel-Verz trennen+neu zuordnen 09.
IF Exist Z:\ subst Z: /D 10.
Subst Z: "E:\%1\%Ziel1%" 11.
xcopy N:\*.* Z:\*.* %param% 12.
.... 13.
) 14.
15.
REM für %Verz2%, %VerzN% analog. Lw Z: trennen+neu zuordnen 16.
..Ein weiterer präventiver Schritt sollte allerdings sein, mit Skript und mit Deinen Endusern zusammen mal hin und wieder die "bedenklich langen Dateinamen" zu suchen - mit willkürlicher Max-Längen-Vorgabe von Dir. Und die gemeinsam auf kürzere Pfade/Namen zu bringen. Keine automatische Verstümmelung durch /N oder so was.
Grüße
Biber
FrankD schreibt am 20.07.2009 um 10:58:34 Uhr
Hallo zusammen,
ich bin auf diesen Thread gestoßen, da mich folgendes Problem zwickt:
Ich habe als NAS-Platte im Netzwerk eine Buffallo Linkstation Mini mit einem RAID1 Verbund aus zwei 500er Platten. Da gab's neulich Probleme, jedenfalls wollte ich an deren USB-Port eine 500er 2,5"-HDD anhängen und ein Backup machen. Das dauert ewig und Recherchen auf der Herstellersite ergaben, dass ab einer Pfadtiefe von 120 Zeichen es möglicherweise Probleme geben könne die eben genau zu diesem langsamen Backup führten.
So, jetzt suche ich ein Programm oder eine Batchdatei die mir die Anzahl der Zeichen im Pfad auswirft, denn auf der NAS habe ich - ordnungsliebend - natürlich verschachtelt und sortiert.
Mein Problem bei Euch: Ich verstehe nicht wirklich alles. Ich habe z.B. die sehr übersichtliche Batch von TuXHunt3R in den Editor kopiert und als zeichen.bat gespeichert. Die starte ich im CMD-Fenster und habe nun das Problem, wie ich den Pfad angeben soll.
Beispiel: Die Batch liegt bei mir auf D: - überprüfen will ich H: (eine USB-HDD), dann gebe ich ein "test \\h:" - das funktioniert nicht, will ich H:\Dateiablage überprüfen, so gebe ich ein "test \\h:\Dateiablage", auch hier meckert die Batch, dass der Pfad nicht existiert.
Auf der NAS, der ich per Netzlaufwerk den Laufwerksbuchstaben S: zugewiesen habe, dasselbe Problem.
Was mache ich verkehrt? Ich bin in DOS nicht mehr wirklich sattelfest.
Gruß,
Frank
ich bin auf diesen Thread gestoßen, da mich folgendes Problem zwickt:
Ich habe als NAS-Platte im Netzwerk eine Buffallo Linkstation Mini mit einem RAID1 Verbund aus zwei 500er Platten. Da gab's neulich Probleme, jedenfalls wollte ich an deren USB-Port eine 500er 2,5"-HDD anhängen und ein Backup machen. Das dauert ewig und Recherchen auf der Herstellersite ergaben, dass ab einer Pfadtiefe von 120 Zeichen es möglicherweise Probleme geben könne die eben genau zu diesem langsamen Backup führten.
So, jetzt suche ich ein Programm oder eine Batchdatei die mir die Anzahl der Zeichen im Pfad auswirft, denn auf der NAS habe ich - ordnungsliebend - natürlich verschachtelt und sortiert.
Mein Problem bei Euch: Ich verstehe nicht wirklich alles. Ich habe z.B. die sehr übersichtliche Batch von TuXHunt3R in den Editor kopiert und als zeichen.bat gespeichert. Die starte ich im CMD-Fenster und habe nun das Problem, wie ich den Pfad angeben soll.
Beispiel: Die Batch liegt bei mir auf D: - überprüfen will ich H: (eine USB-HDD), dann gebe ich ein "test \\h:" - das funktioniert nicht, will ich H:\Dateiablage überprüfen, so gebe ich ein "test \\h:\Dateiablage", auch hier meckert die Batch, dass der Pfad nicht existiert.
Auf der NAS, der ich per Netzlaufwerk den Laufwerksbuchstaben S: zugewiesen habe, dasselbe Problem.
Was mache ich verkehrt? Ich bin in DOS nicht mehr wirklich sattelfest.
Gruß,
Frank
TuXHunt3R schreibt am 20.07.2009 um 14:46:31 Uhr
Hallo Frank
Da hast du etwas falsch verstanden. Es gibt bei Windows grundsätzlich zwei Arten, wie Pfade angegeben werden können.
1.) Mit UNC-Pfaden für den Zugriff auf Netzwerkfreigaben: \\server\freigabe$
2.) Lokale Laufwerke, z.B. H:\Ordner1
In deinen Fall kannst du als Pfad einfach folgendes angeben, dann solte es funktionieren:
Die ganze Zeile sähe dann bei dir folgendermassen aus:
Da hast du etwas falsch verstanden. Es gibt bei Windows grundsätzlich zwei Arten, wie Pfade angegeben werden können.
1.) Mit UNC-Pfaden für den Zugriff auf Netzwerkfreigaben: \\server\freigabe$
2.) Lokale Laufwerke, z.B. H:\Ordner1
In deinen Fall kannst du als Pfad einfach folgendes angeben, dann solte es funktionieren:
01.
H:\Die ganze Zeile sähe dann bei dir folgendermassen aus:
01.
zeichen.bat H:\ 120










6741schreibt am 10.02.2008 um 19:39:03 Uhr6741schreibt am 11.02.2008 um 09:42:27 Uhr