Batchdatei, welche von einem Netzwerkpfad die genaue Zeichenanzahl ausgibt
Batch, welcher eine Pfadtiefe je Zeile ermittelt und den Wert hinter den Pfad schreibt
Hallo zusammen,
bei meinen Backup ist mir aufgefallen, dass nicht mehr alle Dateien gesichert werden. Nun möchte ich ein Batchskript schreiben, welches für einen Netzwerpfad einen vordefinierten Ordner ausliest, anhand des Kriteriums "abPfadLängeX" (Beispiel 200 Zeichen) und die gefundenen Pfade in eine Datei schreibt, erzeugen.
Mein bisheriger Batch sieht so aus, hier werden an einem Bestimmten Ordner (G:\Projekte) die Verzeichnisse, als auch Unterverzeichnisse ausgegeben und in einen Datei weggespeichert. Wenn es die Datei schon gibt, wird die vorherige Log Datei gelöscht und eine neue erzeugt. Soweit so gut, nun soll das Skript um die Pfadtiefe erweitert werden.
Wie macht man das sinnvollerweise?
Hallo zusammen,
bei meinen Backup ist mir aufgefallen, dass nicht mehr alle Dateien gesichert werden. Nun möchte ich ein Batchskript schreiben, welches für einen Netzwerpfad einen vordefinierten Ordner ausliest, anhand des Kriteriums "abPfadLängeX" (Beispiel 200 Zeichen) und die gefundenen Pfade in eine Datei schreibt, erzeugen.
Mein bisheriger Batch sieht so aus, hier werden an einem Bestimmten Ordner (G:\Projekte) die Verzeichnisse, als auch Unterverzeichnisse ausgegeben und in einen Datei weggespeichert. Wenn es die Datei schon gibt, wird die vorherige Log Datei gelöscht und eine neue erzeugt. Soweit so gut, nun soll das Skript um die Pfadtiefe erweitert werden.
Wie macht man das sinnvollerweise?
@echo off & setlocal
if exist C:\Pfadtiefe\summary.txt del C:\Pfadtiefe\summary.txt
for %%i in (g:\projekte\) do (
pushd "%%i"
for /f "delims=" %%a in ('dir /l /n /s /b ') do echo \%%a >>C:\Pfadtiefe\summary.txt
popd
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 175887
Url: https://administrator.de/contentid/175887
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
erstelle dir ein VBS-Script mit folgendem Inhalt, und speichere z.B. als check_chars.vbs
dann fügst du ans Ende deiner Batch folgende Zeile ein:
Als Ergebnis erscheinen die Zeilen mit mehr als 200 Zeichen in der Shell. Die Ausgabe kannst du dann an in eine Datei leiten...
dim quelle,ziel,anzahl_zeichen
quelle = Wscript.Arguments(0)
anzahl_zeichen = 200
set objFS = Wscript.CreateObject("Scripting.FileSystemObject")
set sumfile = objFS.OpenTextFile(quelle, 1)
while not sumfile.AtEndOfStream
line = sumfile.ReadLine
if len(line) > anzahl_zeichen then
wscript.echo line
end if
wend
sumfile.close()
cscript //nologo check_chars.vbs [PFAD ZUR SUMMARY.TXT]
Du musst noch hinter 'setlocal' enabledelayedexpansion hinzufügen.
Den Teil zwischen :loop und goto :eof kannst du ans Ende deiner Batch stellen. Dieser Teil fungiert quasi als function der mit %%a als Parameter aufgerufen wird. Die Performance des Scripts ist hiermit jedoch nicht so gut, da jeder Buchstabe eines Pfades gezählt wird. Die Pfade die länger als 200 Zeichen sind werden in die Datei "output.txt" geschrieben.
Grüße Uwe
Den Teil zwischen :loop und goto :eof kannst du ans Ende deiner Batch stellen. Dieser Teil fungiert quasi als function der mit %%a als Parameter aufgerufen wird. Die Performance des Scripts ist hiermit jedoch nicht so gut, da jeder Buchstabe eines Pfades gezählt wird. Die Pfade die länger als 200 Zeichen sind werden in die Datei "output.txt" geschrieben.
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /l /n /s /b ') do (call :loop "%%a")
:loop
set /a Nr=0
set pfad=%1
set pfad=%pfad:~1,-1%
:start
set "char=!pfad:~%Nr%,1!"
if "%char%"=="" goto :ende
set /a Nr+=1
goto :start
:ende
if %Nr% GTR 200 (echo %pfad% >>output.txt)
goto :eof
Grüße Uwe
Moin cyberdevil,
vor einiger Zeit hatte ich mal in einem Tutorial ein paar Skizzen dazu gemacht.
Workshop Batch for Runaways - Part I - Beispiel FindLongPath.Bat Bedenklich lange Pfade finden.
Wahrscheinlich nicht ganz ohne Anpassungen verwendbar, aber hilft vielleicht.
Grüße
Biber
vor einiger Zeit hatte ich mal in einem Tutorial ein paar Skizzen dazu gemacht.
Workshop Batch for Runaways - Part I - Beispiel FindLongPath.Bat Bedenklich lange Pfade finden.
Wahrscheinlich nicht ganz ohne Anpassungen verwendbar, aber hilft vielleicht.
Grüße
Biber
@softmeister
Wieso erstes und letztes Zeichen des Pfades eliminieren?
Etwas kürzer (und ohne "
Dabei wird zwar von einer Mindestlänge von einem Zeichen ausgegangen, aber bei einem per "
Grüße
bastla
Wieso erstes und letztes Zeichen des Pfades eliminieren?
Etwas kürzer (und ohne "
delayedExpansion
") wäre übrigens:set "char=%pfad%"
:start
set /a Nr+=1
set "char=%char:~1%"
if defined char goto :start
for
" erstellten/übergebenen Variableninhalt für %pfad% nehme ich das Risiko ... Grüße
bastla
Der Mischmasch kann nicht funktionieren, Bau das Script so wie ich das oben geschrieben habe, das funktioniert 100% (getestet). Der Output meiner Version gibt aber nur die Zeilen aus, nicht die Länge des Pfades. Das lässt sich aber leicht ergänzen mit der Zeile
...
:ende
if %Nr% GTR 200 (echo %pfad% ## Length %Nr% >>output.txt)
goto :eof